【问题标题】:How to know when StatusBar size changed (iPhone)如何知道状态栏大小何时更改(iPhone)
【发布时间】:2026-01-18 02:00:01
【问题描述】:

我有 UITabBarController 和 2 个标签。一个调整大小就好了,当状态栏大小发生变化时(模拟器“切换通话状态栏”菜单项)。另一个没有。

有问题的标签项包含一个静态视图,该视图会根据某些内容动态加载一个或另一个视图。在使此设置正常工作时,我发现主选项卡视图不会自动发送,例如viewWillAppear 和 viewWillDisappear 消息到我的动态子视图。

Apple 文档解释这是因为系统无法识别动态添加的视图。

@interface MyTabViewController : UIViewController
{
    UIView *mainView;
    FirstViewController *aController;
    SecondViewController *bController;
}
...
if (index == 0)
{
    self.aController = [[FirstViewController alloc]
        initWithNibName:@"FirstViewController" bundle:nil];            
    [self.mainView addSubview:aController.view];
    [self.aController viewWillAppear:YES];
}

如何将 StatusBar 大小更改事件 放入我的动态子视图中?如其他地方所述,“didChangeStatusBarFrame”不起作用。

【问题讨论】:

    标签: iphone uiviewcontroller uitabbarcontroller statusbar


    【解决方案1】:

    你看过this question吗?

    另外,我们可以使用application:didChangeStatusBarFrame:查看您的应用代理代码吗?

    【讨论】:

    • 我的解决方案是改变架构:使用系统,而不是反对它:) 换句话说,我现在只有一个 UIViewController(其中包含一个重用的 UITableView,它动态更改 dataSource 和委托)跨度>
    • 当我测试 didChangeStatusBarFrame 时,它​​只适用于旋转(检查事件,即使应用程序没有旋转)。无法识别网络共享或通话中...*.com/questions/2406175/…
    【解决方案2】:

    您可以自己编程调整大小,但通常这是通过使用“自动调整大小蒙版”来完成的。 (UIView 有一个属性 autoresizingMask)。

    【讨论】:

    • 我可以,如果系统会告诉我的话。也许“自动调整大小”设置错误,因为该应用程序根本不支持旋转。
    【解决方案3】:

    我不确定,但由于您是以编程方式添加这些视图,因此您可能忘记设置自动调整大小掩码。没有它,当状态栏框架发生变化时,视图不会自动调整大小。

    [newView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleWidth];
    

    希望对你有帮助。

    【讨论】: