如何调整textView的大小以适合其内容(根据contentsize调整textview的大小)

我正在尝试调整textView的大小以适合其内容,该内容是多行长文本。

我不明白的

对于stackoverflow有一个直接的答案,它基本上使用“ sizeThatFits”方法。 此方法要求UIView计算适合其内容的大小。 多好。

但这对我来说不起作用,我也不明白为什么。

我做了什么

我的代码如下所示:

 导入UIKitclass ViewController:UIViewController { 
@IBOutlet弱var topTextView:UITextView!
@IBOutlet弱var bottomTextView:UITextView!

覆盖func viewDidLoad(){
super.viewDidLoad()让LONGTEXT = “hogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehoge” topTextView.text = LONGTEXT
bottomTextView.text = longText

topTextView.isScrollEnabled = true
bottomTextView.isScrollEnabled = false

调整大小(textView:topTextView)
调整大小(textView:bottomTextView)
}
fileprivate func resize(textView:UITextView){
var newFrame = textView.frame
让width = newFrame.size.width
让newSize = textView.sizeThatFits(CGSize(width:width,
高度:CGFloat.greatestFiniteMagnitude))
newFrame.size = CGSize(width:width,height:newSize.height)
textView.frame = newFrame
}
}

这是我的故事板。

这就是我得到的:

TopTextView的高度仅为40px,但BottomTextView的大小已相应调整。

为什么? 因为TopTextView已启用滚动。

我现在如何理解

如果启用了滚动,似乎UITextView不会调整大小。

因此,下一个问题是:计算出的尺寸是否错误? 还是忽略了框架设置?

似乎“ sizeThatFits”在两个textView上都计算出166.67px的高度,这是正确的。 大小计算没有问题。

这意味着(可能)设置了UITextView的frame属性,但是如果启用了滚动,则将其忽略。

我还是不明白

为什么忽略框架? 这是我的想法:

UITextView是UIScrollView的子级,也许UITextView的框架与UIScrollView的框架不同。 如描述所述,初始化UITextView将“使用指定的文本容器创建一个新的文本视图”。

即使设置了UITextView的框架,也并不意味着UIScrollView的框架将进行相应的调整。。。只是猜测,如果有人可以让我知道原因,我将不胜感激!