【问题标题】:iOS 7 UITextView height resize quirkiOS 7 UITextView 高度调整大小怪癖
【发布时间】:2013-10-20 16:11:04
【问题描述】:

使用从我在 stackoverflow 上找到的多个答案中收集的信息,我已经能够使用以下方法正确调整 UITextView's 的高度:

[bookQuoteTxtView sizeToFit];
[bookQuoteTxtView layoutIfNeeded];

我这样做是因为UITextView 显然会包含不同数量的文本,因为用户可能在前一个屏幕上选择了内容。

但是,我仍然遇到一个奇怪的问题。
似乎当传递给UITextView 的文本包含换行符时,它会抛出整个高度。

这是没有任何换行符的文本:

这是相同的文本,中间有几个换行符:

如您所见(借助我添加到包含它的 UITextViewScrollView 的橙色和黄色背景颜色),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];
  }

我越来越多地认为是导致问题的数据库,但我在这里完整地展示了整个图片,以确保我仍在正确地进行高度调整。
如果您有什么问题或有任何修复建议,请告诉我。

【问题讨论】:

  • 你能不能创建一个NSString,用UTF8String记录它的内容,然后保存到sqlite,看看读取的字符串是否有相同的内容?
  • 我想我可以做到这一点,但我可以告诉你,我正在使用的数据库已经预先填充了数据。它不是以编程方式创建的 - 也不会以编程方式更新。这几乎是与客户的协议。因此,在修复数据库中的任何异常(换行符等)方面 - 我必须在出路时这样做。这意味着我正在从中读取数据,而不是在向其中插入数据时。那有意义吗?但无论如何我都会继续这样做,让你知道我得到了什么。
  • 当然,这确实有道理。我没有在 SQLite 中存储 UTF8 字符的经验,所以也许其他人会帮你找到那些有问题的字符。

标签: iphone objective-c ios7 uitextview sizetofit


【解决方案1】:

除了使用一种技术来设置 UITextView 的 contentSize 之外,我真的没什么建议。

textView.text    = @"text from DB";
CGRect rect      = textView.frame;
rect.size.height = textView.contentSize.height;
textView.frame   = rect;

然后使用可能需要的任何技术来额外更新框架。希望你能解决问题!

【讨论】:

    猜你喜欢
    • 2013-10-09
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    相关资源
    最近更新 更多