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;
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. –