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;

и затем использовать любые методы, которые могут потребоваться для дополнительного обновления кадра. Надеюсь, вы решите проблему!

Другие вопросы по тегам