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

Контроллер добавляет 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 ]

15 голосов
/ 17 октября 2011

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

[segmentedControl sizeToFit];

1 голос
/ 02 января 2012

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

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

[segmentedControl setNeedsLayout];
...