2015-05-12 2 views
0

Я установил пользовательские ширины для сегментов в UISegmentedControl. Из-за этого SegmentedControl не использует auto-layout. (В раскадровке я применил constraint на всех 4 сторонах SegmentedControl.)Применить автоматическую компоновку к UISegmentedControl

Вот мой код:

CGFloat segmentWidth = self.segment.frame.size.width; 

[self.segment insertSegmentWithTitle:@"titleName" atIndex:2 animated:NO];  
[self.segment setWidth:segmentWidth/6 forSegmentAtIndex:1]; 
[self.segment setWidth:segmentWidth/6 forSegmentAtIndex:2]; 

[self.segment setWidth:segmentWidth/3 forSegmentAtIndex:0]; 

Вот изображение, чтобы проиллюстрировать то, что делает этот код:

enter image description here

Есть ли способ добавить auto-layout в segments?

+0

Опубликовать скриншот о вашем autoLayout, кажется, что проблема связана с проблемой – Leo

+0

'Автоматическая макета' применяется к' SegmentedControl' в целом, но не к отдельным «сегментам». Поэтому, когда 'view', содержащий' SegmentedControl', расширяется, «сегменты» не одинаково шире, последний «сегмент» становится широким, а не расширением «сегментов». Я знаю, что это немного запутанно. Дайте мне знать, если вы поняли – Jessica

+0

Возможно, вы не можете установить отдельные сегменты с автоматической компоновкой. Об этом говорится в документе [Apple doc] (https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UISegmentedControl_Class/index.html): ** Объект UISegmentedControl автоматически изменяет размеры сегментов, чтобы соответствовать пропорционально внутри их супервизор, если у них нет определенной ширины. ** Подобно 'textLabel' для' UITableViewCell', Apple обрабатывает некоторые GUI для согласованности. Если вы хотите больше контролировать его, вы всегда можете сделать свой пользовательский SegmentControl, например, кнопками. –

ответ

2

Проблема в том, что ваш код не в том месте. Поместите его в viewDidLayoutSubviews, и все будет хорошо.

+0

Я поместил его в действие 'buttons'. После этого он получает вызов. – Jessica

+0

Но если автоматическая компоновка работает и размер сегментированного элемента управления изменяется, ваш код не будет запускаться снова таким образом. Вам нужно его запустить _automatically_ - каждый раз, когда автоматический макет выполняет макет. Вот почему он должен идти в 'viewDidLayoutSubviews'. – matt

+0

Вы спросили: «Есть ли способ добавить авто-макет к сегментам». Я рассказываю вам, как это сделать. Если ваш код находится в 'viewDidLayoutSubviews', то сегменты будут корректироваться независимо от того, что делает сегментированный элемент управления, и пропорции всегда будут правильными. – matt

Смежные вопросы