代码之家  ›  专栏  ›  技术社区  ›  mightknow

Swift UIScrollView高度取决于UITextView内容

  •  1
  • mightknow  · 技术社区  · 6 年前

    我有一个包含多个视图的UIScrollView,其中一个是UITextView。我正在尝试设置滚动视图的高度以匹配内容。问题是UITextView的高度根据其包含的文本而变化。此内容是在视图控制器中的override 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 回复  |  直到 6 年前
        1
  •  0
  •   Shehata Gamal    6 年前

    使用

    let descriptionTextViewHeight = self.descriptionTextView.frame.height
    

    返回textView的可见高度, 要获取textView中可滚动内容的高度,可以使用

    let descriptionTextViewHeight = self.descriptionTextView.contentSize.height
    
        2
  •  0
  •   mightknow    6 年前

    好啊我不知道为什么会这样,但如果我把这行文字的值设置为:

    self.descriptionTextView.text = self.description
    

    在viewDidLayoutSubviews()而不是viewDidLoad()中,它可以工作。我不知道为什么会这样,因为viewDidLoad()是在viewDidLayoutSubviews()之前调用的,并且两者都是在viewDidAppear()之前调用的;但出于某种原因,这将返回UITextView高度的正确值,其中包含:

    self.descriptionTextView.frame.height
    

    在viewDidAppear()方法中。