Próbuję dynamicznie aktualizować wysokość UITextView za pomocą następującego kodu, ale wynik jest konsekwentnie wyłączony o kilka pikseli, co powoduje, że widok tekstu zawija się, ale nie ma odpowiedniego rozmiaru. Po wprowadzeniu kolejnej litery (lub dwóch) wyświetlacz jest odpowiednio aktualizowany.Zawijanie UITextView z boundingRectWithSize:
Przeglądam różne wpisy (wiele z nich jest nieaktualnych, ponieważ odwołują się do przestarzałych rozmiarów) i nie widzę niczego innego. Korzystających boundingRectWithSize: (albo NSString lub NSAttributedString - których próbowałam zarówno) wyglądać następująco:
CGRect boundingRect = [string boundingRectWithSize: CGSizeMake(CGRectGetWidth(textView.frame), CGFLOAT_MAX)
options: NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
attributes: @{
NSFontAttributeName : textView.font
}
context: NULL];
float h = ceil(CGRectGetHeight(boundingRect));
textViewHeightLayoutConstraint.constant = h;
wiem, że pierwszą rzeczą, którą masz zamiar powiedzieć to: wypustki. Oto mój kod konfiguracji:
textView.textContainerInset = UIEdgeInsetsZero;
textView.contentInset = UIEdgeInsetsZero;
textView.layoutMargins = UIEdgeInsetsZero;
Czy są inne ustawienia wkładek?
Uwaga boczna: Używam MuseoSans jako czcionki.
Hack Rozwiązanie
ja „stałe” problem, sprawdzając, czy szerokość mieści się w progu (obecnie 9PX z testów), a jeśli tak jest, udając, że dodatkowa linia została dodana tak:
float fontHeight = ceil([@"lp" sizeWithAttributes: @{
NSFontAttributeName : textView.font
}].height);
if ((CGRectGetWidth(textView.frame) - ceil(CGRectGetWidth(boundingRect))) <= 9.f)
h += fontHeight;
Powyższe pozwala mi uchwycić maksymalną możliwą wysokość, a następnie zwiększyć jej wysokość w widoku tekstowym. Widok tekstowy odpowiednio zawija i pokazuje tekst w następnym wierszu.
Pomysły?
Mały UPDATE
dodanych w tym bez efektu:
NSMutableParagraphStyle *paragraphStyle = [NSParagraphStyle.defaultParagraphStyle mutableCopy];
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
CGRect boundingRect = [string boundingRectWithSize: CGSizeMake(CGRectGetWidth(textView.frame), CGFLOAT_MAX)
options: NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
attributes: @{
NSFontAttributeName : textView.font,
NSParagraphStyleAttributeName : paragraphStyle
}
context: NULL];