Dwie linie tekstu w UISegmentedControl
Spróbuj, jak mogę, nie mogę rozwiązać błędu UISegmentedControl dla aplikacji na iPhone'a z systemem iOS7.
Kiedy tworzę kontrolkę segmentowaną, używam tego kodu:
NSArray *segmentedControlItemArray = [NSArray arrayWithObjects: @"Nominal:\n27 inch", @"Actual:\n700c x 23mm", @"Actual:\n700c x 20mm", nil];
_wheelDiameterSegmentedControl = [[UISegmentedControl alloc] initWithItems:segmentedControlItemArray];
_wheelDiameterSegmentedControl.frame = CGRectMake(0, 102, 290, 50);
_wheelDiameterSegmentedControl.selectedSegmentIndex = 0;
_wheelDiameterSegmentedControl.tintColor = [UIColor colorWithRed:0.35 green:0.4 blue:0.9 alpha:1.0];
for (id segment in [_wheelDiameterSegmentedControl subviews]) {
for (id label in [segment subviews]) {
if ([label isKindOfClass:[UILabel class]]) {
UILabel *titleLabel = (UILabel *) label;
titleLabel.numberOfLines = 0;
}
}
}
[_wheelDiameterSegmentedControl addTarget:self
action:@selector(pickOne:)
forControlEvents:UIControlEventValueChanged];
[_wheelDiameterMenuContainer addSubview:_wheelDiameterSegmentedControl];
Niestety, nie mogę publikować obrazów lub pokazywałbym obraz dokładnie takiej kontroli, jakiej chcę: każdy segment w formancie UISegmented ma dwie linie tekstu, z przerwą wierszową dokładnie tam, gdzie o to poprosiłem.
Jednak podczas obrotu chciałbym, aby kontrolka segmentowana była pełna, a podziały linii wyglądały głupio w tak szerokich segmentach. Tak więc w willAnimateRotationToInterfaceOrientation dołączyłem następujący kod, bez przerw w wierszach:
[_wheelDiameterSegmentedControl setFrame:CGRectMake(0, 102, 450, 50)];
[_wheelDiameterSegmentedControl setTitle:@"Nominal: 27 inch" forSegmentAtIndex:0];
[_wheelDiameterSegmentedControl setTitle:@"Actual: 700c x 23mm" forSegmentAtIndex:1];
[_wheelDiameterSegmentedControl setTitle:@"Actual: 700c x 20mm" forSegmentAtIndex:2];
I jeszcze raz, gdybym mógł wstawić obraz, pokazałbym Ci dokładnie to, czego chcę: szeroki UISegmented Control bez żadnych podziałów na etykietach (1 linia tekstu na etykiecie).
Oto, gdzie wpadam w kłopoty. Moje wybory, kiedy obracam się z powrotem do portretu, wydają się być:
1 linia tekstu etykiety, obcięta, z formatem
„Rzeczywisty: 7 ...”
kiedy po prostu zresetuję rozmiar UISegmentedControl za pomocą
[_wheelDiameterSegmentedControl setFrame:CGRectMake(0, 102, 290, 50)];
2 linie tekstu etykiety, obcięte, z formatem
"Rzeczywisty:
700c x ... "
po zresetowaniu rozmiaru, a także zresetowaniu wartości ciągu i ponownym uruchomieniu pętli kodu, który ustawia numer etykietyOfLines na 2, używając
NSArray *segmentedControlItemArray = [NSArray arrayWithObjects: @"Nominal:\n27 inch", @"Actual:\n700c x 23mm", @"Actual:\n700c x 20mm", nil];
[_wheelDiameterSegmentedControl setTitle:[segmentedControlItemArray objectAtIndex:0] forSegmentAtIndex:0];
[_wheelDiameterSegmentedControl setTitle:[segmentedControlItemArray objectAtIndex:1] forSegmentAtIndex:1];
[_wheelDiameterSegmentedControl setTitle:[segmentedControlItemArray objectAtIndex:2] forSegmentAtIndex:2];
for (id segment in [_wheelDiameterSegmentedControl subviews]) {
for (id label in [segment subviews]) {
if ([label isKindOfClass:[UILabel class]]) {
UILabel *titleLabel = (UILabel *) label;
titleLabel.numberOfLines = 2;
}
}
}
[_wheelDiameterSegmentedControl setFrame:CGRectMake(0, 102, 290, 50)];
3 linie tekstu etykiety z formatem
"Rzeczywisty:
700c x
20mm
to jest to, co otrzymuję, kiedy wymieniam wymuszoną liczbęOfLines = 2 powyżej na NumberOfLines = 0, która działała, gdy ustawiłem UISegmentedControl.
To, co chciałbym, to to, co otrzymuję, gdy tworzę kontrolę, czyli
"Rzeczywisty:
700c x 20mm
Ale bez względu na to, co próbowałem (wstawienie kodu string i numberOfLines do willRotateToInterfaceOrientation lub didRotateFromInterfaceOrientation; ponowne ustawienie ramki UISegmentedControl przed zmianą tekstu; ponowne ustawienie ramki po zmianie tekstu ...), mogę ' odzyskaj moją ładną, zgrabną, dwuwierszową etykietę. Czego mi tu brakuje?