【问题标题】:UIScrollView content is under navigation bar when first loaded首次加载时,UIScrollView 内容位于导航栏下方
【发布时间】:2015-04-25 06:45:06
【问题描述】:

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

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

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

任何想法为什么会发生这种情况以及我可以做些什么来解决它?谢谢!

【问题讨论】:

    标签: ios uiviewcontroller uiscrollview


    【解决方案1】:

    通过关闭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
    }
    

    不确定最初的问题是什么,但目前可行。但是,如果有人对原始问题有深入了解,请告诉我!

    【讨论】:

      【解决方案2】:

      在我的情况下,问题出在我的 viewWillAppear 方法中。

      确保 super 调用位于 overrides 方法主体的第一行:

      override func viewWillAppear(_ animated: Bool) {
          super.viewWillAppear(animated)
          // your codes will be here
      }
      

      【讨论】:

        猜你喜欢
        • 2015-01-13
        • 1970-01-01
        • 1970-01-01
        • 2020-07-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-03
        • 1970-01-01
        • 2021-10-13
        相关资源
        最近更新 更多