UIToolbar с UISegmentedControl AutoLayout (/ полная ширина)

У меня есть UIViewController с UIToolBar ниже UINavigationBar и UITableView ниже этого. Единственным UIBarButtonItem на моем UIToolBar является UISegmentedControl как на скриншоте ниже: введите описание изображения здесь

Однако как я могу заставить UISegmentedControl / UIBarButtonItem растягиваться, чтобы заполнить UIToolBar как в приложении App Store? введите описание изображения здесь

Имейте в виду, что я также поддерживаю ландшафтный режим, поэтому он должен автоматически растягиваться, чтобы соответствовать новой ширине, когда устройство повернуто. Этого я надеялся достичь с помощью AutoLayout , но насколько я знаю, я не могу использовать AutoLayout внутри UIToolBar .

Любые предложения (за исключением замены UIToolbar на UIView )?

2 Solutions collect form web for “UIToolbar с UISegmentedControl AutoLayout (/ полная ширина)”

Я создал панель инструментов с сегментированным управлением внутри, а затем сделал сегментированный элемент управления 320 широким. Затем я устанавливаю гибкие направляющие макетов с каждой стороны, чтобы заставить сегментированный элемент управления в центр. Это выглядит прекрасно в портрете, но сегментированный контроль не будет растягиваться для пейзажа.

Портрет (включает в себя установку и симулятор IB) введите описание изображения здесь

Пейзаж (также включает установку и симулятор IB) введите описание изображения здесь

Кажется, что в хранилище приложений есть сегментированный элемент управления, который установлен на определенную ширину, а затем просмотр не разрешается вращаться. Я понимаю, что вы хотите, чтобы сегментированный элемент управления менял ширину с макетом, но, к сожалению, это невозможно с автоматическим расположением на данный момент.

Мое предложение было бы, если бы вы действительно хотели, чтобы сегментированный элемент управления изменял ширину с вращением, было бы программно устанавливать ширину, когда устройство поворачивается в альбомное.

 - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { if(UIDeviceOrientationIsLandscape(UIDevice.currentDevice().orientation)) { //set segmented control to landscape } if(UIDeviceOrientationIsPortrait(UIDevice.currentDevice().orientation)) { //set segmented control to portrait width } } 

Еще одна вещь, если вы в конечном итоге используете это устройство для вращения устройства, вам все равно понадобятся эти гибкие распорки в IB, чтобы ваш сегментированный контроль был сосредоточен на панели инструментов

Вы можете сделать это с помощью кода. Что-то вроде этого:

 @interface ViewController () @property (strong, nonatomic) IBOutlet UIToolbar *toolbar; @property (strong, nonatomic) IBOutlet UISegmentedControl *segment; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; _segment.translatesAutoresizingMaskIntoConstraints = NO; [_toolbar addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-8-[_segment]-8-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_segment)]]; [_toolbar addConstraint:[NSLayoutConstraint constraintWithItem:_segment attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:_toolbar attribute:NSLayoutAttributeCenterY multiplier:1. constant:0.]]; } @end 
PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.