【问题标题】:How to prevent UIView from sliding down a little when navigationBarHidden is set to YES当navigationBarHidden设置为YES时如何防止UIView下滑一点
【发布时间】:2010-12-10 17:29:36
【问题描述】:

基本上,我将全屏 UIViewController 推入 UINavigationController 并希望切换 navigationBarHidden 是否显示。

然而我发现当我将navigationBarHidden设置为YES后,整个UIView会向下滑动44像素,为navigationBar腾出空间。如何禁用此行为?由于我已经将 barStyle 设置为 UIBarStyleBlackTranslucent 并且确实不需要滑动。

//init viewController
[self.navigationController pushViewController:viewController animated:YES];

编辑:

我还在处理将滚动视图推送到导航控制器的问题。我发现在将导航栏设置为可见之后。我的滚动视图将被向下推一点,当我在该状态下手动滚动视图时,滚动视图本身会再次向上滑动。我的问题是如何防止 scrollView 向下滑动。

视图向下或向上滑动之前的帧大小相同。

【问题讨论】:

    标签: iphone cocoa-touch uinavigationcontroller


    【解决方案1】:

    尝试重置视图框架。将栏设置为隐藏后执行以下操作:

    viewController.frame  = self.navigationController.frame;
    

    您总是可以在那里打破它并查看值是什么,甚至可以相应地构建一个自定义框架以使其适合。我以前必须这样做...

    【讨论】:

    • 我可以在将导航按钮设置为隐藏后重置框架,但是如何防止视图向下滑动,因为导航按钮就像覆盖视图?
    【解决方案2】:

    我通过将 scrollView 添加到 UIView 并将 UIView 设置为 UIViewController 的视图解决了这个问题。

    【讨论】:

      【解决方案3】:

      我认为这是 UINavigationController 的错误/功能,我不知道有什么方法可以禁用它。糟透了。我总是不得不手动重新调整我的视图框架。这比处理旋转、滚动视图时更痛苦......

      【讨论】:

      • 遗憾的是,我还在处理将滚动视图推送到导航控制器的问题。我发现在将导航栏设置为可见之后。我的滚动视图将被向下推一点,当我在该状态下手动滚动视图时,滚动视图本身会再次向上滑动。你有什么想法吗?
      【解决方案4】:

      可能与 contentInset 有关。设置 navigationBarHidden 属性时,如果当前视图控制器的根视图是滚动视图,则其 contentInsets.top 设置为顶栏的高度。

      为了防止这种情况,在更改 navigationBarHidden 的行之后,立即将 self.scrollView.contentInset 重置为您拥有的任何原始值。

      【讨论】:

        【解决方案5】:

        在 viewDidLoad 方法中添加以下内容:

        self.wantsFullScreenLayout = YES;

        它告诉视图控制器已经在导航栏下放置了子视图。

        【讨论】:

          【解决方案6】:

          这里没有一个答案对我有用。相反,您可以在 viewDidLayoutSubviews() 期间重置 UIScrollView 上的插图,如下所示(在 Swift 中):

          override func viewDidLayoutSubviews() {
              super.viewDidLayoutSubviews()
          
              // prevent the scrollview from adding some inset for the status bar
              self.detailScroll.contentInset = UIEdgeInsetsZero
          }
          

          【讨论】:

            【解决方案7】:

            我试过了,唯一可行的方法是将navigationBar以其原点y移动,并将navigationBar的subViews的alpha更改为0.f;如果想要它显示出来,只需反向进行

            【讨论】:

              【解决方案8】:

              self.navigationController.navigationBar.alpha = 0.0;

              这可能是一个简单的解决方案

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2017-04-04
                • 2011-02-08
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-09-03
                相关资源
                最近更新 更多