2015-11-11 19 views
5

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]; 

Odpowiedz

7

znalazłem odpowiedź. Jest w:

textView.textContainer.lineFragmentPadding 

Potrzebowałem odjąć to od mojej szerokości textView. Sądzę, że oprócz 3 zestawów wstawek i marginesów istnieje inne źródło dopełnienia.