【问题标题】:Why is the topLayoutGuide length different on iPhone and iPad?为什么 iPhone 和 iPad 上的 topLayoutGuide 长度不同?
【发布时间】:2016-05-21 00:59:40
【问题描述】:

在 iPad 上,我的视图控制器(在导航控制器内,作为拆分视图控制器的详细视图)的 topLayoutGuide 长度为 64(显示导航栏)和 20(隐藏导航栏)。这是有道理的。

在 iPhone 横屏时,状态栏会自动隐藏,导航栏会变短。 topLayoutGuide 长度读取为 32(显示导航栏),0(隐藏导航栏)。这也是有道理的。

但是,在纵向的 iPhone 上,它的 topLayoutGuide 长度为 44(显示导航栏)和 0(隐藏导航栏)。状态栏自动显示;为什么 topLayoutGuide 不承认额外的 20px 空间?

我宁愿不编写令人讨厌的条件代码,这样 iPhone 才能正确读取其 topLayoutGuide。是否有我可以设置的视图或导航控制器的属性将返回 topLayoutGuide 的直观值?它是否与位于拆分视图控制器中有关?

【问题讨论】:

    标签: objective-c uisplitviewcontroller uistatusbar uilayoutguide


    【解决方案1】:

    不应该这样。在 ipad 和 iphone 中,toplayout 指南应始终保持不变。如果您在计数方面犯了任何错误,请检查两次。

    您可以做一个实验:在 VC 中拖动一个视图(没有导航栏)并将其定位在 y=20 然后单击 pin 并通过单击下拉箭头检查其顶部,默认情况下将显示与 toplayout 指南的距离。

    看它的截图:

    现在,如果您固定此约束,然后在 iphone or ipad 中打开它,它将保持在状态栏上方,即距离视图边缘低 20 像素。

    您已使用带有顶部布局指南的0 distance (constant = 0) 设置约束,因此它保持0 distance with layout guide,因此它看起来比边缘低20 像素。

    现在,如果 toplayout guide 变为 0(正如您所说的),那么这个视图应该接触到边缘,因为它与顶部布局指南管理 0 距离。并且您的布局指南为零,因此视图应该触摸边缘,或者它的 y 应该为 0,但它没有发生,所以我可以说您进行了一些错误的计算

    希望这会有所帮助:)

    【讨论】:

    • 不幸的是,我没有在 IB 中固定任何东西,我只是在代码中阅读它: int RideTop = [self.topLayoutGuide length];然后我根据该值定位一些标签。但是当我 NSLog 那个值时,我得到了我之前提到的不一致的值。 (该代码位于视图控制器中,即拆分视图控制器的详细视图。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多