2011-08-31 15 views
6

Kontroler dodaje UISegmentedControl do paska nawigacji. Sterowanie podzielone na segmenty jest dodawane do paska nawigacyjnego w metodzie sterownika, ale rzeczywiste segmenty są tworzone dynamicznie po wywołaniu viewDidLoad.Automatyczne zmienianie rozmiaru w pasku nawigacji segmentowanego elementu sterującego zbudowanego dynamicznie

Nie mogę automatycznie zmienić rozmiaru segmentów po wyświetleniu widoku. Wszystkie są zgniecione, like in this post, ale rozdzielczość nie ma tutaj zastosowania. Jeśli segmenty zostaną dodane przed dodaniem segmentowanego elementu sterującego do prawego elementu paska nawigacji (zrywając dynamiczną naturę kodu), zostaną one automatycznie zmienione i będą wyglądać poprawnie po wyświetleniu widoku.

Poniżej jest obnażona wersja mojego kodu, poniżej. czego mi brakuje?

@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 

Odpowiedz

14

Po wywołaniu połączenia insertSegmentWithTitle

[segmentedControl sizeToFit];

+0

Witam @ Krzysztof, próbowałem, ale niestety nie działało. – ptrico

+1

Pracował dla nas, dzięki! –

1

miałem ten sam problem dzisiaj - segmenty UISegmentedControl początkowo były wyświetlane z odpowiednich szerokościach zmiennych, ale nie powiększa się lub zmniejsza, aby dopasować długość nowe, dynamicznie aktualizowane tytuły.

Wysłanie segmentowanego elementu sterującego komunikat setNeedsLayout po każdej aktualizacji rozwiązał problem.

[segmentedControl setNeedsLayout]; 
+0

Cześć @fedonev, dzięki za odpowiedź na to stare pytanie. Przyjmuję twoją odpowiedź, chociaż sam jej nie przetestowałem. Sądzę, że w efekcie wyliczyłem i ustawiłem programowo szerokość każdego segmentu. Twoje rozwiązanie brzmi prościej. – ptrico

+0

Narzędzie SizeToFit wykonuje zadanie oraz w przypadku zmiany tytułów segmentów. – Jeff

Powiązane problemy