【问题标题】:Extend UIViewController's view without a navigation bar under status bar扩展 UIViewController 的视图,状态栏下没有导航栏
【发布时间】:2015-02-06 14:18:11
【问题描述】:

我的视图没有导航栏,但我想在状态栏下显示内容。我已经检查了顶部栏下的扩展边缘,在我的视图控制器中的不透明栏下,我想在状态栏下显示的视图对顶部布局指南的垂直间距约束为 0,但仍然是我得到的:

状态栏有 20px 纯白色背景,这是我不想要的。我希望我的视图在状态栏下重叠,就像下面的样机:

我该怎么做,没有有一个可见的导航栏(我仍然有它,因为我的视图保证在导航控制器内,但它永远不会可见,因为我有很多包括顶栏在内的定制设计部分)?

【问题讨论】:

  • 这是否意味着你隐藏了navigationController的navigationBar?
  • @EdAbe 是的,我隐藏了导航栏,因为我有一些高度自定义的视图用作顶部栏/导航栏。但我也需要到达状态栏下方。
  • 您是否将视图控制器的扩展布局设置为边缘 rectzero。对我来说,将导航栏设置为隐藏并将扩展布局设置为零矩形使其工作。
  • @EdAbe 不,设置self.edgesForExtendedLayout = UIRectEdgeNone;(我认为是您所说的那个)并没有改变任何东西。
  • 为我工作automaticallyAdjustsScrollViewInsets = false

标签: ios uiviewcontroller ios8


【解决方案1】:

如果您使用的是安全区域布局指南,您可以在 Interface Builder 中完全做到这一点。

使用Top Space to Container Margin 约束而不是Top Space to Safe Area 约束将状态栏下所需的视图固定到主视图。

然后在主视图的 Size Inspector 上,取消选中 Safe Area Relative Margins。

【讨论】:

    【解决方案2】:

    研究了几十页几个小时后,我找到了答案:

    for (NSLayoutConstraint *constraint in self.view.constraints) {
        if((constraint.firstItem == self.topLayoutGuide && constraint.secondItem == self.view) ||
           (constraint.secondItem == self.topLayoutGuide && constraint.firstItem == self.view))         {
            constraint.constant = -20;
        }
    }
    

    对于任何想知道的人,我没有使用特定的答案,而是从这个问题派生的解决方案:iOS7 - View under status bar - edgesForExtendedLayout not working

    【讨论】:

    • 当您添加带有故事板或代码的视图时,为什么不将 topLayoutGuide 的偏移量设置为 -20 ?
    • @hsafarya 我不知道。我认为我的回答和你所说的有效地做同样的事情。我没有将对象从指南移动-20pt,而是将对象粘在指南上并将指南本身移动-20pt。他们都可以工作。
    • 如果状态栏是 40pt 而不是 20 呢?此答案不适用于 X 设备或任何扩展状态栏案例
    【解决方案3】:

    在视图控制器或父视图控制器上,您必须将automaticallyAdjustsScrollViewInsets 设置为NO。上一个答案有点小题大做,因为框架提供了一个控制这种行为的属性。

    【讨论】:

    • 在 iOS 13 中已弃用,现在在可滚动视图(例如 UIScrollView、UITableView、UICollectionView...)上使用属性“contentInsetAdjustmentBehavior”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多