滾動到巢狀 StackViews 中的內容

關於滾動的最大問題是確定在 ScrollView 內部呈現(例如) StackView 內的 Textfield 所需的偏移量。

如果你試圖得到 Textfield.frame.minY 的位置可以是 0 ,因為 minY 幀只考慮了元素和 StackView 頂部之間的距離。所以你必須考慮所有其他父堆疊檢視/檢視。

一個很好的解決方法是:

1 - 實現 ScrollView 擴充套件

extension UIScrollView {

    func scrollToShowView(view: UIView){
        var offset = view.frame.minY
        var superview = view.superview
        while((superview  != nil)){
            offset += (superview?.frame.minY)!
            superview = superview?.superview
        }
        
        offset -= 100 //optional margin added on offset
        
        self.contentOffset = CGPoint.init(x: 0, y: offset)
    }

}

這將考慮所有父檢視並將滾動檢視的必要偏移量相加在螢幕上顯示必要的檢視(例如,不能留在使用者鍵盤後面的 Textfield)

用法示例:

func textViewDidBeginEditing(_ textView: UITextView) {
    self.contentScrollView.scrollToShowView(view: textView)
}