iOS 7 UITextView Причуда изменения размера
Используя информацию, полученную из нескольких ответов, которые я нашел здесь в stackru, я смог правильно определить размер UITextView's
высота с использованием:
[bookQuoteTxtView sizeToFit];
[bookQuoteTxtView layoutIfNeeded];
Я делаю это потому, что UITextView
очевидно, будет содержать различное количество текста в результате того, что пользователь, возможно, выбрал на предыдущем экране.
Тем не менее, я все еще сталкиваюсь с одной странной проблемой.
Кажется, что когда текст, который передается в UITextView
содержит разрыв строки, он сбрасывает всю высоту.
Вот текст без каких-либо разрывов строк:
И вот тот же текст с парой разрывов строк в середине:
Как вы можете видеть (с помощью оранжевого и желтого цветов фона я добавил в UITextView
& ScrollView
который содержит это), то UITextView's
высота не изменилась соответствующим образом, и теперь текст обрезается - все из-за этих разрывов строк.
Код, который я использую, чтобы сделать все это динамическое изменение высоты на UITextView
является:
// BookQuote TextView:
bookQuoteTxtView = [[UITextView alloc] initWithFrame:CGRectMake(5, 30, 310, 80)];
bookQuoteTxtView.backgroundColor = [UIColor orangeColor];
bookQuoteTxtView.font = [UIFont fontWithName:@"Arial" size:15];
bookQuoteTxtView.text = [NSString stringWithFormat:@"%@", bookObject.bookQuote];
[bookQuoteTxtView sizeToFit];
[bookQuoteTxtView layoutIfNeeded];
bookQuoteTxtView.editable = NO;
[scroller addSubview:bookQuoteTxtView];
// Now get the HEIGHT of the Book-Quote TextView:
CGRect textViewFrame = bookQuoteTxtView.frame;
CGFloat textViewFrameHeight = bookQuoteTxtView.contentSize.height;
textViewFrame.size.height = textViewFrameHeight;
bookQuoteTxtView.frame = textViewFrame;
Итак, еще раз, это работает почти безупречно практически для каждой строки, которая передается в мой UITextView
коробка. Таким образом, все строки разной длины работают, UITextView's
высота регулируется автоматически и все круто. Это просто разрывы строк, которые отбрасывают все.
СКАЗАЛ, ЧТО... Кажется, что разрывы строк, сгенерированные с использованием "\n" в строке, ДОЛЖНЫ работать, но разрывы строк, встроенные / закодированные в строку, которая поступает и читается из базы данных Sqlite3, - НЕ работают.
Так что вы должны задаться вопросом, в этом ли проблема.
Вот код, который я использую, чтобы прочитать мою дату из базы данных:
// Book Quote:
char *bookQuoteChar = (char *)sqlite3_column_text(statement, 4);
NSString *bookQuoteString;
if (bookQuoteChar == NULL) {
bookQuoteString = @"N/A";
}
else {
bookQuoteString = [[NSString alloc] initWithUTF8String:bookQuoteChar];
}
Я все больше думаю о том, что именно база данных является причиной проблемы, но я представляю здесь всю картину целиком, чтобы убедиться, что я все еще правильно выполняю корректировку высоты.
Пожалуйста, дайте мне знать, если что-то выскочило на вас или есть какие-либо предложения по исправлению.
1 ответ
Я не могу предложить многое, кроме использования техники для установки contentSize
UITextView.
textView.text = @"text from DB";
CGRect rect = textView.frame;
rect.size.height = textView.contentSize.height;
textView.frame = rect;
и затем использовать любые методы, которые могут потребоваться для дополнительного обновления кадра. Надеюсь, вы решите проблему!