我有一个UIScrollView,里面有多个视图,其中一个是UITextView。我试图设置滚动视图的高度以匹配内容。问题是UITextView的高度根据其包含的文本而变化。此内容在视图控制器的覆盖viewDidLoad()方法中设置,但由于某种原因,即使在内容的值发生更改后,我获得的视图高度值也不会反映任何更改。我有一个函数来改变内容子视图的高度,通过改变它的高度约束常量,我在viewDidAppear()方法中调用它。相关代码如下:
func setPageSize() {
var pageHeight : CGFloat {
var height : CGFloat = 1000 // The height of all content besides the UITextView
let descriptionTextViewHeight = self.descriptionTextView.frame.height
height += descriptionTextViewHeight
return height // Always returns 60, which is the height of view when using the placeholder text from interface builder (doesn't update when text updated).
}
self.pageViewHeightConstraint.constant = pageHeight
}
override func viewDidLoad() {
super.viewDidLoad()
self.descriptionTextView.text = self.description
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
self.setPageSize()
}
我应该在其他地方调用setPageSize()方法吗?在输入新文本时,UITextView中是否有一个返回更新值的方法?我也尝试使用内容视图中最后一个视图的位置作为设置高度的参考,但是我遇到了同样的问题 - 它返回的值就好像UITextView的高度一样总是60岁,但事实并非如此。
答案 0 :(得分:0)
使用
let descriptionTextViewHeight = self.descriptionTextView.frame.height
返回textView的可见高度, 要获得textView中可滚动内容的高度,可以使用
let descriptionTextViewHeight = self.descriptionTextView.contentSize.height
答案 1 :(得分:0)
行。我不确定为什么会这样,但如果我把这一行设置为文本的值:
self.descriptionTextView.text = self.description
在viewDidLayoutSubviews()而不是viewDidLoad()中它起作用。我不确定为什么会这样,因为在viewDidLayoutSubviews()之前调用viewDidLoad(),并且在viewDidAppear()之前调用它们;但由于某种原因,这会返回UITextView高度的正确值:
self.descriptionTextView.frame.height
在viewDidAppear()方法中。