Jeśli metoda sizeWithFont:constrainedToSize:lineBreakMode:
jest nieaktualna w systemie iOS7, w jaki sposób mogę automatycznie zmienić rozmiar UILabel
, aby dynamicznie dopasować jej wysokość i szerokość do tekstu?Zmień rozmiar UILabel z sizeWithFont: constrainedToSize: lineBreakMode: przestarzałe w iOS7
Odpowiedz
Skończyło się na tym. Pracuje dla mnie. Nie działa to z obiektem IBOutlets, ale jest użyteczne, gdy dynamicznie obliczamy wysokość tekstu na podstawie metody uitableview heightForRowAtIndexPath:.
NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:@"FontName" size:15], NSFontAttributeName,
nil];
CGRect frame = [label.text boundingRectWithSize:CGSizeMake(263, 2000.0)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:attributesDictionary
context:nil];
CGSize size = frame.size;
To nie wydaje się działać w ogóle z IBOutlet UILabel – Tim
To nie zadziała "jak jest" z auto-układem. Sprawdź moje rozwiązanie tutaj: http://stackoverflow.com/a/18933978/557054 –
To powinno działać w iOS6 i iOS7, ale złamie swoje ograniczenia label (trzeba ustawić je wszystkie z powrotem programowo w razie potrzeby):
-(void)resizeHeightForLabel: (UILabel*)label {
label.numberOfLines = 0;
UIView *superview = label.superview;
[label removeFromSuperview];
[label removeConstraints:label.constraints];
CGRect labelFrame = label.frame;
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
CGRect expectedFrame = [label.text boundingRectWithSize:CGSizeMake(label.frame.size.width, 9999)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:[NSDictionary dictionaryWithObjectsAndKeys:
label.font, NSFontAttributeName,
nil]
context:nil];
labelFrame.size = expectedFrame.size;
labelFrame.size.height = ceil(labelFrame.size.height); //iOS7 is not rounding up to the nearest whole number
} else {
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
labelFrame.size = [label.text sizeWithFont:label.font
constrainedToSize:CGSizeMake(label.frame.size.width, 9999)
lineBreakMode:label.lineBreakMode];
#pragma GCC diagnostic warning "-Wdeprecated-declarations"
}
label.frame = labelFrame;
[superview addSubview:label];
}
Dodaj tę metodę do viewController i używać go tak:
[self resizeHeightForLabel:myLabel];
//set new constraints here if needed
To jest ratownik! Ilość czasu, którą spędziłem na rozmyślaniu z tym, jest nierealna, na przykład dla prostego problemu, który próbuję rozwiązać. –
Używam tego i dobrze zmieniam rozmiar etykiety, ale gdy etykieta zostanie ponownie dodana do podglądu, pozycja jest nieprawidłowa, mimo że mogę sprawdzić, czy punkt początkowy jest nadal poprawnie ustawiony na ramce. –
@PeteMartin to Ty z pewnością jeden z superdokładów to nie UITableViewCell lub inny buforowany element UI? W takim przypadku potrzebne jest pewne obejście. –
- 1. sizeWithFont: constrainedToSize: lineBreakMode: przestarzałe w iOS7
- 2. Zamiennik dla sizeWithFont: ForWidth: lineBreakMode:
- 3. UIKit [NSString sizeWithFont: constrainedToSize:] w AppKit
- 4. iPhone UILabel sizeWithFont:
- 5. Jak uzyskać rozmiar NSString, gdy NSString zawiera emotikony?
- 6. Z czym powinienem zastąpić przestarzałą metodę sizeWithFont:?
- 7. Zmień rozmiar UIImage i zmień rozmiar UIImageView
- 8. rozmiar UILabel dopasować
- 9. Zmień rozmiar obrazu z JavaScript
- 10. Zmień rozmiar wysokości z Highcharts
- 11. sizeWithFont z MonoTouch
- 12. Dlaczego rozmiar UIFont sizeWithFont zawiera puste miejsce w obliczeniach?
- 13. Zmień rozmiar elementu z uchwytami w rogach
- 14. Zmień rozmiar czcionki w legendzie
- 15. Zmień rozmiar obrazu w WPF
- 16. Zmień rozmiar UIStepper?
- 17. WpF zmień rozmiar kompletny
- 18. Zmień rozmiar paska błędu
- 19. Zmiana rozmiaru UILabel w celu dopasowania tekstu
- 20. UIPickerView z Multiline UILabel
- 21. iOS: ustaw rozmiar czcionki programu UILabel Programowalnie
- 22. HTML TextArea zmień rozmiar automatycznie
- 23. gridExtra 2.0.0 zmień rozmiar tytułu
- 24. Zmień tylko rozmiar czcionki w SWT
- 25. Zmień rozmiar background-image w javascript
- 26. Wyrównanie tekstu UILabel w prawo
- 27. Zmień rozmiar marker w Seaborn Factorplot
- 28. UILabel widoczna część tekstu
- 29. Jak zmienić rozmiar UILabel, aby zmieścił się w tekście
- 30. dismissModalViewControllerAnimated jest przestarzałe
Zdecydowanie zainteresowany, aby się tego dowiedzieć. Próbowałem zamiast tego używać metody boundingRect, ale nie można wprowadzić ograniczeń, jak to możliwe, z powyższym. – Tim
co jest nie tak z boundingReadWithSize: options: attributes: context? – peko
Musiałem nadużywać tego, dam mu jeszcze raz! – Tim