根据contentSize调整自定义UITableViewCell中的UITextView大小

时间:2015-12-17 15:20:53

标签: ios swift uitableview uitextview

我正在尝试自己制作消息泡泡。我正在使用自定义UITableViewCell类,并尝试在其中调整UITextView的大小。

UITextView正在调整其高度,但不是宽度。

这就是我尝试过的。

我创建了一个xib;

enter image description here

正如您所看到的,xib中有6个约束。尾随,前导,顶部和底部空间约束以及最大/最小宽度约束。

以下是自定义UITableViewCell' awakeFromNib(:)方法;

 override func awakeFromNib() {
        super.awakeFromNib()
        self.messageContent.layer.cornerRadius = 5
        self.messageContent.clipsToBounds = true
        self.messageContent.editable = false
        self.messageContent.scrollEnabled = false
        self.messageContent.sizeToFit()
        self.messageContent.layoutIfNeeded()
        let size = self.messageContent.sizeThatFits(CGSizeMake(messageContent.contentSize.width, CGFloat.max))
        messageContent.bounds.size = size  
        // Initialization code
    }

当我运行此代码时,结果如下;

enter image description here 这有点工作但不是一直。我希望在1行之后但在此之前使宽度恒定且高度灵活;我的意思是如果有一行,文字我想使宽度灵活和高度恒定。

如果有人帮忙,我会很高兴。 快乐的编码!

修改

当我尝试删除尾随约束或减少它时,布局就像这样;

enter image description here

2 个答案:

答案 0 :(得分:0)

您可以通过更改xib来仅使用没有约束的UITextView来实现此目的。

enter image description here

然后使消息类看起来像这样,它将最大宽度设置为300但如果文本较少则会缩小,并且高度将根据需要增长。

import UIKit

class MessageTextView: UITextView {

    override func awakeFromNib() {
        super.awakeFromNib()
        layer.cornerRadius = 5
        clipsToBounds = true
        editable = false
        scrollEnabled = false
        sizeToFit()
        layoutIfNeeded()
        let size = sizeThatFits(CGSizeMake(contentSize.width > 300 ? 300 : contentSize.width, CGFloat.max))
        bounds.size = size
    }
}

答案 1 :(得分:0)

我添加了前导,下限和顶部约束以及设置宽度约束小于或等于250并解决了问题!

enter image description here