2013-02-10 17 views
9

Mam UILabel, który zawiera dwa przypisane ciągi oddzielone nową linią. Pierwszy ciąg ma rozmiar czcionki ustawiony na 17, a drugi na 14. Chcę, aby mój pierwszy rozmiar NSMutableAttributedString został zmieniony na minimalny rozmiar czcionki, jeśli jego zawartość nie mieści się w pojedynczej linii.iOS - Auto-obkurcz UILabel z przypisanym tekstem

Czy to możliwe?

Bardzo łatwo jest skonfigurować takie zachowanie UILabel, ustawiając "auto shrink na minimalny rozmiar czcionki" w IB dla zwykłego tekstu, ale nie wiem, jak to zrobić dla przypisanego tekstu.

Oto mój kod:

NSString *eventName = @"Looong Event Name"; 
NSString *placeString = @"My place"; 

eventName = [eventName stringByAppendingString:@"\n"];   
NSMutableAttributedString *attrName = [[NSMutableAttributedString alloc] initWithString:eventName]; 
[attrName addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:17] range:NSMakeRange(0, [eventName length])]; 


NSMutableAttributedString *attrPlace = [[NSMutableAttributedString alloc] initWithString:placeString]; 
[attrPlace addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:14] range:NSMakeRange(0, placeString.length)]; 
[attrPlace addAttribute:NSForegroundColorAttributeName value:[UIColor grayColor] range:NSMakeRange(0, placeString.length)]; 

    NSMutableAttributedString *finalString = [[NSMutableAttributedString alloc] initWithAttributedString:attrName]; 
    [finalString appendAttributedString:attrPlace]; 

    UILabel *nameLabel = (UILabel *)[cell viewWithTag:100]; 

    nameLabel.attributedText = finalString; 
+0

To zmieniło się w ból głowy, gdy próbowałem to zrobić. Nie zamieszczę tego jako odpowiedzi, ponieważ jest prawdopodobne, że istnieje lepsze rozwiązanie, którego nie mogłem znaleźć. Ale ostatecznie skonfigurowałem wszystkie atrybuty mojego ciągu znaków programowo (z wyjątkiem tych związanych z rozmiarem) i utworzyłem etykietę IBOutlet, i skonfigurowałem "Minimalny rozmiar czcionki" w menu rozwijanym "Autoshrink" w inspektorze atrybutów. –

Odpowiedz

4

Chyba to jest kontynuacją swojej earlier question.

Nie sądzę, że można to zrobić automatycznie, ale istnieje metoda NSAttributedString, która pozwala sprawdzić, czy twój ciąg znaków jest zbyt duży i dostosować się w razie potrzeby.

+0

Jeszcze raz dziękuję! :-) – Oleg

+0

Więc rozwiązałeś to Oleg? – Simon

+0

Tak, zamiast tego korzystałem z dwóch oddzielnych UILabeli z jawnym tekstem. – Oleg