当有大量文本时,UITextView文本会被切断

时间:2013-05-30 12:49:53

标签: ios cocoa-touch uitableview uiscrollview uitextview

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

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

这一段时间以来一直运作良好,但我注意到,如果我的文字数量特别多,那么文字就会被切断。我已将文本视图框背景颜色设置为橙色,以便我可以验证框架是否正确设置。这是一个例子(我只显示文本视图的底部):

enter image description here

框架是基于文本的正确尺寸(在这种情况下为1019个点),但文本在文本视图的底部之前停止。我还看到文本在一条线的中途被切断(即最后一行文本的文本在水平方向中途切断)。有谁知道这里发生了什么?

其他几点:

  • 文本视图适用于所有内容较短的表格视图单元格。
  • 如果我增加上面显示的案例中的文字数量,文字视图的高度会增加,但文字仍会在同一个地方被切断。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

使用它来获取textSize

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

希望它对你有所帮助。

答案 2 :(得分:0)

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

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

希望它可以帮助:)