我在UIViewController中设置了一个基本的UIScrollView,它位于UINavigationController中。我使用autolayout使滚动视图填充视图控制器,我在滚动视图中有一个内容视图,其中包含一些其他视图。据我所知,这是正确设置的。
首次加载视图控制器(即推入导航堆栈)时,滚动视图和滚动条的内容将显示在导航栏后面。但是,当我将设备旋转到横向,然后回到纵向时,内容会移动到导航栏下方的正确位置。
我确实希望内容在导航栏后滚动,但它应该从它下面开始。我在IB中为我的UIViewController启用了automaticallyAdjustsScrollViewInsets
。就像我说的那样,我在旋转设备后得到正确的行为,而不是在初始加载时。
为什么会发生这种情况以及我可以采取哪些措施来解决这个问题?谢谢!
答案 0 :(得分:4)
通过关闭automaticallyAdjustsScrollViewInsets
并在viewWillLayoutSubviews
中手动执行此操作来解决此问题,如下所示。
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
let insets = UIEdgeInsets(top: self.topLayoutGuide.length, left: 0, bottom: 0, right: 0)
scrollView.contentInset = insets
scrollView.scrollIndicatorInsets = insets
}
不确定最初的问题是什么,但现在这样做了。但是,如果有人对原始问题有所了解,请告诉我们!
答案 1 :(得分:0)
就我而言,问题出在我的viewWillAppear
方法中。
确保超级调用位于覆盖方法主体的第一行:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// your codes will be here
}