Автоматическое изменение размера в навигационной панели сегментированного элемента управления, построенного динамически


Контроллер добавляет UISegmentedControl в панель навигации. Сегментированный элемент управления добавляется в панель навигации в методе viewDidLoad контроллера, но фактические сегменты создаются динамически после вызова viewDidLoad.

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

Вот урезанная версия моего кода, ниже. Чего мне не хватает?

@implementation MyController    

- (void)viewDidLoad {

    // segmentedControl is an ivar
    segmentedControl = [UISegmentedControl alloc] initWithItems:[NSArray array]];
    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl] autorelease];
    self.navigationController.navigationBar.topItem.rightBarButtonItem = barButtonItem;

}

- (void)someMethodCalledAfterViewDidLoad {

    [segmentedControl insertSegmentWithTitle:@"a title"
                                     atIndex:0
                                    animated:NO];
}

@end
2 6

2 ответа:

После вызова insertSegmentWithTitle вызов

[segmentedControl sizeToFit];

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

Отправка сегментированному элементу управления сообщения setNeedsLayout после каждого обновления решила проблему.

[segmentedControl setNeedsLayout];