Swift UIScrollView高度取决于UITextView内容

时间:2018-03-28 18:18:21

标签: ios swift uiscrollview uitextview

我有一个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岁,但事实并非如此。

2 个答案:

答案 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()方法中