Ios UIScrollView内容插入自动布局问题

Ios UIScrollView内容插入自动布局问题,ios,uiview,uiscrollview,autolayout,ios-autolayout,Ios,Uiview,Uiscrollview,Autolayout,Ios Autolayout,我有一个自定义UIView,它将UIScrollView作为子视图。我的问题是,当视图调整大小时,我希望调整滚动视图的大小,并将其contentInset重置为: scrollView.contentInset = UIEdgeInsets(top: self.bounds.height/2, left: 0, bottom: self.bounds.height/2, right: 0) 如何使用自动布局进行此操作?给定如下视图布局: 当容器视图MyView更改大小时,可以使用视图的bo

我有一个自定义UIView,它将UIScrollView作为子视图。我的问题是,当视图调整大小时,我希望调整滚动视图的大小,并将其contentInset重置为:

  scrollView.contentInset = UIEdgeInsets(top: self.bounds.height/2, left: 0, bottom: self.bounds.height/2, right: 0)

如何使用自动布局进行此操作?

给定如下视图布局:

当容器视图MyView更改大小时,可以使用视图的bounds属性的didSet属性自动更改UIScrollView contentInset属性:

import UIKit

class MyView: UIView {

    weak var scrollView: UIScrollView!

    override var bounds: CGRect {
        didSet {
            scrollView.contentInset = UIEdgeInsets(top: bounds.height / 2, left: 0, bottom: bounds.height / 2, right: 0)
        }
    }
}

class ViewController: UIViewController {

    @IBOutlet weak var myView: MyView!
    @IBOutlet weak var scrollView: UIScrollView!

    override func viewDidLoad() {
        super.viewDidLoad()

        myView.scrollView = scrollView
    }
}

需要注意的是,在内容插入发生更改时,您可能看不到这些更改,因为例如,当内容插入减少时,滚动视图的内容不会自动滚动到边缘。您必须播放滚动条才能看到内容插入确实发生了变化。

这给我们带来了另一个问题,即观察UIView上的边界变化。是否始终调用此setter?一些答案,例如,表明它不可靠。嗯,我明白了。有什么方法可以直接挂接到调整滚动视图大小的事件中?例如,设备方向改变,或任何导致滚动视图大小改变的事件。