【问题标题】:ios 7 UiView frame issueios 7 UiView 框架问题
【发布时间】:2013-08-16 14:55:02
【问题描述】:

我在 iOS6 和 iOS7 中运行相同的应用程序,它具有 NavigationBar。它在 iOS6 上运行良好,但在 iOS7 中,所有视图都有点像它根本没有考虑导航栏。

我尝试在模拟指标选项中更改顶部栏属性,但它不起作用。它在 iOS6 中从 NavigationBar 考虑按钮的位置,但在 iOS7 中,它从屏幕顶部考虑。

这是什么原因?

提前致谢。

【问题讨论】:

    标签: uiview uiviewcontroller uinavigationbar frame ios7


    【解决方案1】:

    您应该使用下面的行在您的视图中修复它。

     self.edgesForExtendedLayout = UIRectEdgeNone;
    

    【讨论】:

    • 是的,它对我来说工作正常。但我的应用程序有 Tabbacontroller alos。视图控制器的其余部分工作正常。 Tabbar 视图控制器中的问题。假设我有 5 个标签。 1. 当我单击选项卡(打开列表屏幕)时,当我单击列表详细信息打开正常时,它工作正常。直到它工作正常 2. 当我点击选项卡 2(另一个列表)时打开。那个时候,当我点击 tab1 时,比细节屏幕主视图框架减少到 64px。我试图强行增加但没有工作..在这种情况下我该怎么办??
    • 我觉得设置这个属性之前最好先检查一下:[self respondsToSelector:@selector(edgesForExtendedLayout)]
    【解决方案2】:

    在“iOS 7 UI 过渡指南”中也提到了布局和外观之一——在 iOS7 中,视图控制器使用全屏布局。

    如果我们想让视图从导航栏显示如下位置,可以修改UIViewController的edgesForExtendedLayout这个属性来实现。

    edgesForExtendedLayout 是一个 UIExtendedEdge 类型的属性,指定要延伸的边的方向。

    因为iOS7鼓励全屏布局,它的默认值自然是UIRectEdgeAll,都是围绕边缘延伸的,也就是说如果tabBar下面连view有navigationBar,那么view就会把覆盖范围扩大到周围。

    如果我们进行如下设置视图,那么视图将不会扩展到那些栏后面,所以标签就出来了。 查看源打印

    self . edgesForExtendedLayout = UIRectEdgeNone ;
    

    【讨论】:

    • 使用 'edgesForExtendedLayout' 对我没用。我在 viewDidLoad 方法中添加它。任何帮助都将是可观的。
    • 我已经在 4-5 应用程序中实现,它的工作。你能描述一下你的场景吗?
    • 我也确认了。它有效,你必须把它放在每个窗口中
    • 不再是 uiextendedEdgeNone,而是 UIRectEdgeNone
    • 是的,在早期的 Xcode5 预览版中它是 UIExtendedEdgeNone,但在最新版本中它是 UIRectEdgeNone。
    【解决方案3】:

    在 iOS 7 中,视图控制器使用全屏布局。 iOS 7 UI 过渡指南中提到过

    如果您想更改布局,请使用 edgesForExtendedLayout 属性

    示例:

       if([UIViewController instancesRespondToSelector:@selector(edgesForExtendedLayout)])
    
            self.edgesForExtendedLayout=UIRectEdgeNone;
    

    【讨论】:

    • 是的,它对我来说工作正常。但我的应用程序有 Tabbacontroller alos。视图控制器的其余部分工作正常。 Tabbar 视图控制器中的问题。假设我有 5 个标签。 1. 当我单击选项卡(打开列表屏幕)时,当我单击列表详细信息打开正常时,它工作正常。直到它工作正常 2. 当我点击选项卡 2(另一个列表)时打开。那个时候,当我点击 tab1 时,比细节屏幕主视图框架减少到 64px。我试图强行增加但没有工作..在这种情况下我该怎么办??
    【解决方案4】:

    我自己也遇到过类似的问题,发现如果关闭导航栏的半透明,视图会像在 iOS6 中一样下拉。

    self.navigationController.navigationBar.translucent = NO;
    

    【讨论】:

      【解决方案5】:

      在给出这个答案时,iOS 7 仍处于保密协议下,因此无法编写实际的解决方案。无论如何,为了提供帮助,我发布了一个仅供注册开发者使用的帮助链接。

      ==== 原帖:====

      阅读iOS 7 Transition Guide。它的“更新 UI”部分解释了如何解决您的问题。

      【讨论】:

      • 在我发帖时,iOS 7 仍处于保密协议下,因此唯一能提供帮助的方法就是指向只有注册开发者才能访问的官方指南。
      • @Tafkadasoh 我理解您的困境并感谢您在不考虑 NDA 的情况下提供帮助。我会(恭敬地)建议如果您在原始答案中提到 NDA,然后详细说明在哪里可以找到问题的答案,那么您会得到更好的服务,即:“这仍在 NDA 之下;但是,它已记录在案在 iOS7 转换指南的 NNN 页上..."。这样一来,您就可以创建一个更直接有用的答案,而不会让自己拒绝投票。
      【解决方案6】:
      if([self respondsToSelector:@selector(edgesForExtendedLayout)])
          [self setEdgesForExtendedLayout:UIRectEdgeBottom];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-18
        • 1970-01-01
        • 2014-02-28
        • 1970-01-01
        • 2016-09-09
        • 2015-02-21
        • 1970-01-01
        • 2014-06-09
        相关资源
        最近更新 更多