首次加载时,UIScrollView内容位于导航栏下

时间:2015-02-23 19:59:39

标签: ios uiviewcontroller uiscrollview

我在UIViewController中设置了一个基本的UIScrollView,它位于UINavigationController中。我使用autolayout使滚动视图填充视图控制器,我在滚动视图中有一个内容视图,其中包含一些其他视图。据我所知,这是正确设置的。

首次加载视图控制器(即推入导航堆栈)时,滚动视图和滚动条的内容将显示在导航栏后面。但是,当我将设备旋转到横向,然后回到纵向时,内容会移动到导航栏下方的正确位置。

我确实希望内容在导航栏后滚动,但它应该从它下面开始。我在IB中为我的UIViewController启用了automaticallyAdjustsScrollViewInsets。就像我说的那样,我在旋转设备后得到正确的行为,而不是在初始加载时。

为什么会发生这种情况以及我可以采取哪些措施来解决这个问题?谢谢!

2 个答案:

答案 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
}