2012-09-08 11 views
9

iOS 5.UILabel i numberOfLines i sizeToFit:

mam element, który jest UILabel pierwotnie umieszczony w stalówkę. Chcę, aby miejsce docelowe x pozostało niezmienione. Chcę, żeby zajęło 1 linię lub 2 linie. Jeśli masz więcej niż dwie linie, użyj ustawienia podziału linii, aby wyświetlić wielokropek.

używam numberOfLines mienia i -sizeToFit

Jeżeli ustawić numberOfLines własność UILabel do 0, to będzie poprawnie zobaczyć, że z jakiegoś tekstu, nie ma wystarczająco dużo miejsca i owinąć go do drugiej linii po wywołaniu -sizeToFit ale w rzadkim przypadku, gdy linia jest wystarczająco długa, aby rozciągnąć do 3 linii, otrzymuję trzy linie, których nie chcę. Jeśli ustawię właściwość numberOfLines na 2, to faktycznie rozciąga całą rzecz na jedną linię i wydłuży mój początkowy zestaw ramek w stalówce, aby był znacznie szerszy.

CGRect titleFrame = [[self titleLabel] frame]; 
[[self titleLabel] setNumberOfLines:0]; 
[[self titleLabel] setText:newProductTitleText]; 
[[self titleLabel] sizeToFit]; 
CGRect newTitleFrame = [[self titleLabel] frame]; 

CGRect jest właśnie dla mnie, aby móc obliczyć rzeczy po fakcie. Ustawienie numberOfLines na 0 działa, i nie zmieni oryginalnego origin.x w ramce, i będzie łamać długi tekst na wiele linii, ale nie ograniczy go do 2 linii. Ustawianie numberOfLines własności do 2, który po Czytam docs firmy Apple

Ta właściwość steruje maksymalną liczbę wierszy do wykorzystania w celu dopasowania tekstu etykiety w jego obwiedni prostokąta. Domyślna wartość tej właściwości to 1. Aby usunąć dowolny limit maksymalny i użyć tyle linii, ile potrzeba, ustaw wartość tej właściwości na 0.

Wygląda na to, że powinienem móc ustawić to na dwa i nadal niech to zadziała. Spodziewam się sizeToFit rozwijać w pozytywnym kierunku X i Y, gdy rozwija się zmieścić cały tekst, ale rozwija się w złym kierunku X, gdy numberOfLines jest ustawiona na wartość inną niż 0.

ETA: Opcja „autoSize” rozpórki są ustaw na górze i na lewo, aby naprawić min. x, y.

Dzięki za wszelki wgląd.

+0

Myślę, że ten wątek może pomóc http://stackoverflow.com/questions/5041874/uilabels-sizetofit-sizethatfits-ignore-the-numberoflines-property/13786846 # 13786846 –

+2

To jest stare pytanie i prawdopodobnie nie dotyczy bieżącego iOS, ale nie widzę, jak to jest duplikat. Przeczytałem pytanie, które jest twierdzeniem, że jest to duplikat i jest to inne pytanie.Ten pyta o negatywne X ustawione przez '-sizeToFit', a nie o wyrównanie w pionie tekstu w UILabel. – chadbag

Odpowiedz

0

miałem podobny problem, gdzie -[UILabel sizeToFit] nie szanując Maksymalna szerokość ja ustawić kiedy numberOfLines został ustawiony na 2. Oto jak rozwiązać ten problem:

CGFloat titleMaxWidth = 200; 
    CGFloat titleMinHeight = 30; 
    CGFloat titleMaxHeight = 40; 
    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 5, titleMaxWidth, titleMaxHeight)]; // alternatively, you could do this in a nib 
    titleLabel.numberOfLines = 0; 
    titleLabel.text = @"The title label will be sized appropriately with this technique."; 
    titleLabel.font = [UIFont boldSystemFontOfSize:16]; 
    [titleLabel sizeToFit]; 
    titleLabel.numberOfLines = 2; 
    if (titleLabel.height > titleMaxHeight) 
    { 
     titleLabel.height = titleMaxHeight; 
    } 
    else if (titleLabel.height < titleMinHeight) 
    { 
     titleLabel.height = titleMinHeight; 
    } 

Jak widać, ja też chciałem minimum Wysokość dla mojej etykiety, jako -sizeToFit często sprawia, że ​​etykieta jest naprawdę mała, ale możesz zignorować ten kod, jeśli nie dbasz o minimalną wysokość. "Magiczna liczba" 40 w tytuleMaxHeight pochodzi z eksperymentów i okazuje się, że 2-liniowa etykieta z tą czcionką naprawdę potrzebuje tylko 40 pikseli. W tym kodzie -sizeToFit służy głównie do utrzymywania tekstu w obrębie szerokości i określenia, czy początkowa wysokość 40 może zostać zmniejszona, gdy mamy krótki ciąg tekstu.

0

użyłem UIFont nieruchomości lineHeight:

CGFloat labelHeight = label.font.lineHeight*label.numberOfLines; 
Powiązane problemy