【问题标题】:UITextView text cut off when there is a large amount of text文本量大时UITextView文本被截断
【发布时间】:2013-05-26 01:26:54
【问题描述】:

我有一个 UITableViewCell 子类,其中包含一个 UITextView 滚动已关闭。我在表格视图单元格 layoutSubviews 方法中这样设置它的框架:

    CGRect frame = self.bodyTextView.frame;
    CGSize size = self.bodyTextView.contentSize;
    frame.size = size;
    self.bodyTextView.frame = frame;

这已经有一段时间了,但我注意到在我有特别大量的文本的情况下,文本会被截断。我已将文本视图框架背景颜色设置为橙色,以便验证框架设置是否正确。这是一个例子(我只展示了文本视图的底部):

框架是基于文本的正确大小(在本例中为 1019 磅),但文本在文本视图底部之前停止。我还看到文本在一行中被截断(即最后一个可见文本行的文本被水平截断一半)。有谁知道这里发生了什么?

其他几点:

  • 文本视图适用于我所有内容较短的表格视图单元格。
  • 如果我在上面显示的情况下增加文本量,文本视图高度会增加,但文本仍然会在同一位置被截断。

【问题讨论】:

  • 你是否也在增加单元格高度来代表内容大小?
  • 是的,单元格高度是在表格视图委托 heightForRowAtIndexPath 方法中设置的,并且正在为表格视图单元格设置正确的高度。

标签: ios cocoa-touch uitableview uiscrollview uitextview


【解决方案1】:

根据this 和类似的答案,问题可能是“正确的 contentSize 只有在 UITextView 被添加到视图之后才可用......在此之前它等于 frame.size”

我建议您以不同的方式计算高度,例如 -sizeWithFont: 或 -sizeTofit

【讨论】:

  • 感谢您的链接。这很有趣,但我的框架似乎已经正确设置,只是由于某种原因被截断的文本。我尝试自己计算框架高度,并使用 sizeToFit,但它们没有效果。
  • 真的很抱歉,我误解了这个问题。因此,调整 uitextview 框架的大小似乎不会影响在更大空间中重新绘制 contentsize。你有没有看过这个question?
  • 这让我得到了答案:当我在我的表格视图单元格类中覆盖它时,我忘记调用 [super layoutSubviews]...叹息...
  • 就我而言,问题不在于长度或大小,而在于内容。我正在使用 stripHTML 在进入 UITextView 的途中取出 HTML 标签:self.textView.text = [self.sourceText stripHTML]; 源代码中有一些错误的 HTML,导致内容不完整.
【解决方案2】:

使用它来获取文本大小

// find the text width; so that btn width can be calculate
CGSize textSize = [@"YOUR TEXT" sizeWithFont:[UIFont fontWithName:@"Arial" size:20.0] 
                              constrainedToSize:CGSizeMake(320.0f, 99999.0f)
                                  lineBreakMode:UILineBreakModeWordWrap];

然后使用它设置高度:

CGRect frame = self.bodyTextView.frame;

frame.size = textSize;
self.bodyTextView.frame = frame;

希望对你有帮助。

【讨论】:

  • 感谢您的建议。不过,我的框架已经正确设置,只是由于某种原因被截断的文本。我确实尝试过这个解决方案,只是想看看会发生什么,但没有任何改变。
  • 您是否以编程方式或通过 NIB 创建了文本视图?
  • 它在我的子类 UITableViewCell xib 中。
  • 你能以编程方式使用它吗?我认为它是ios中的一个错误。通过以编程方式创建来检查它是否正常工作。
  • 问题是当我在我的表格视图单元格子类中覆盖它时忘记调用 [super layoutSubviews]。
【解决方案3】:

我遇到了同样的问题,并在 textView 填充(在 swift5 中)上解决了它:

yourTextView.textContainerInset = UIEdgeInsets(top: 5, left: 5, bottom: 5, right: 5)

希望对你有帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-02
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 2010-11-23
    • 1970-01-01
    • 2013-02-16
    相关资源
    最近更新 更多