簡體   English   中英

Swift UIScrollView的高度取決於UITextView的內容

[英]Swift UIScrollView height dependent upon UITextView content

我有一個帶有多個視圖的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,但並非如此。

使用

let descriptionTextViewHeight = self.descriptionTextView.frame.height

返回textView的可見高度,要獲取textView內部可滾動內容的高度,可以使用

let descriptionTextViewHeight = self.descriptionTextView.contentSize.height

好。 我不確定為什么這行得通,但是如果我放置以下行來設置文本的值:

self.descriptionTextView.text = self.description

在viewDidLayoutSubviews()而不是viewDidLoad()中運行。 我不確定為什么會這樣,因為viewDidLoad()在viewDidLayoutSubviews()之前被調用,並且兩者都在viewDidAppear()之前被調用; 但是由於某種原因,這會返回帶有以下內容的UITextView高度的正確值:

self.descriptionTextView.frame.height

在viewDidAppear()方法中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM