【问题标题】:How In-Call status bar impacts UIViewController's view size?通话状态栏如何影响 ViewController 视图大小?
【发布时间】:2011-07-26 01:58:32
【问题描述】:

我试图了解与UITabBarControllerUINavigationControllerUIViewController 关联的view 在通话状态栏切换时如何反应。
我的问题是它们的行为似乎不同,这会给我带来副作用。

我创建了一个项目,为上述 3 种类型更改窗口的根视图控制器,并转储 viewdescription 以获取框架坐标。


  • <strong>UIViewController</strong>

通话状态关闭

UIView: 0x4e2a1f0;帧 = (0 20; 320 460); 自动调整大小 = W+H; …… 开启
UIView: 0x4e2a1f0;帧 = (0 40; 320 440); 自动调整大小 = W+H; ...

这个我明白了:当通话状态栏出现时,UIViewController的view的高度缩小了20,它的y坐标从20移动到了40。

太完美了!当用UITabBarControllerUINavigationController 替换经典的UIViewController 时,我会期待同样的结果,但事实并非如此!


  • <strong>UINavigationController</strong>

InCall 状态栏关闭

UILayoutContainerView: 0x4b35ab0;帧 = (0 0; 320 480); 自动调整大小 = W+H; ..
开启
UILayoutContainerView: 0x4e1b060;帧 = (0 0; 320 480); 自动调整大小 = W+H; ..

在这种情况下,由 UINavigationController 处理的视图在切换通话状态栏时不会更改其框架属性?! (为什么?:()


  • <strong>UITabBarController</strong>

关闭

UIView: 0x4b2f6a0;帧 = (0 20; 320 460); 自动调整大小 = W+H; ...
开启
UIView: 0x4b2f6a0;帧 = (0 20; 320 460); 自动调整大小 = W+H; ...

UINavigationController 相同:切换调用状态栏时,UITabBarControllerview 似乎没有受到影响。


有人可以解释一下在显示调用状态栏时这种调整大小的工作原理吗?
我的最终目标是显示一个UIView,它在整个UITabBarController 上显示ABOVE,并且在显示通话状态时正确调整大小。但是,我真的不知道将这样的视图放在视图层次结构中的哪个位置:如果我将它添加为 UITabBarController 视图的子视图,因为这个视图不会对调用状态显示做出反应,我的也不会做出反应: (

【问题讨论】:

    标签: iphone uitabbarcontroller statusbar in-call


    【解决方案1】:

    通话状态栏切换时视图的高度取决于它的锚定方式。

    使用 UIView 的 autoResizingMask 来控制在通话状态栏出现时视图是否应该向下移动或调整大小。

    这两个属性,

    UIViewAutoresizingFlexibleTopMargin
    UIViewAutoresizingFlexibleHeight  
    

    会帮助你。第一个将视图向下推,第二个更改大小。

    【讨论】:

      【解决方案2】:

      您的常规 UIViewController 示例将 [wantsFullScreenLayout] 设置为 NO,这会导致视图自动调整大小,使其不会位于状态栏下方。

      另一方面,UINavigationController 和 UITabBarController 默认 wantsFullScreenLayout 为 YES。所以他们的视图占据了整个窗口,他们自己调整和定位子视图以适当地处理状态栏。如果您将这些控制器上的属性显式设置为 NO,您应该会获得您想要的行为(但如果您关心的话,将失去正确处理将 wantsFullScreenLayout 设置为 YES 的子控制器的能力)。

      在您的 UITabBarController 示例中,顺便说一句,您似乎没有打印标签栏控制器视图的信息;这里是 UILayoutContainerView,而不是普通的 UIView。

      【讨论】:

      • 嗯,很有意思的评论,我要试试你的提示!非常感谢。
      【解决方案3】:

      理想情况下,您应该忘记视图调整了多少大小并使用自动调整蒙版进行调整。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-10
        • 2015-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多