Ste*_*her 23 iphone statusbar uiview
如何根据笔尖的通话中状态栏调整视图大小?
我认为它只是设置调整大小属性,但它们没有为根UIView启用.
(我认为我的主要问题是我不知道这是什么调用;除了讨论模拟器菜单命令之外,我找不到任何文档中的调用状态栏的引用.)
San*_*gam 24
只要状态栏发生更改,iOS就会调用viewController的viewWillLayoutSubviews方法.您可以覆盖它并根据新边界调整子视图.
- (void)viewWillLayoutSubviews {
// Your adjustments accd to
// viewController.bounds
[super viewWillLayoutSubviews];
}
Run Code Online (Sandbox Code Playgroud)
Mik*_*ter 16
您正在寻找 - [UIApplication statusBarFrame],并且在您的UIApplicationDelegate中,您应该实现此委托方法以通知状态栏的帧何时更改:
- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
Run Code Online (Sandbox Code Playgroud)
如果未设置根视图控制器,则视图可能无法自动调整状态栏大小.我最初在我的应用程序委托中有这个,我的应用程序在所有方面都正常工作,除了它在电话呼叫期间不能正确调整大小.
[self.window addSubview:rootController.view];
Run Code Online (Sandbox Code Playgroud)
我将上面的代码更改为此内容,现在我的应用会在通话期间自动调整大小.
[self.window setRootViewController:rootController];
Run Code Online (Sandbox Code Playgroud)
在日志中查看此内容并调查原因后,我发现了此修复程序.
Application windows are expected to have a root view controller at the end of application launch
Run Code Online (Sandbox Code Playgroud)
当我的应用程序在后台运行时,这对我很有用,我按下命令+ T.在我的场景中,根控制器是我的标签栏控制器,我在每个标签内重新调整我的导航控制器.
- (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame{
[UIView animateWithDuration:0.35 animations:^{
CGRect windowFrame = ((UINavigationController *)((UITabBarController *)self.window.rootViewController).viewControllers[0]).view.frame;
if (newStatusBarFrame.size.height > 20) {
windowFrame.origin.y = newStatusBarFrame.size.height - 20 ;// old status bar frame is 20
}
else{
windowFrame.origin.y = 0.0;
}
((UINavigationController *)((UITabBarController *)self.window.rootViewController).viewControllers[0]).view.frame = windowFrame;
}];
Run Code Online (Sandbox Code Playgroud)
}
当你说"没有为根UIView启用调整大小属性"时,你是什么意思?
通话状态栏没有任何特殊的特殊标识,我认为它周围没有任何API或通知.相反,您的视图应该只是设置为正确自动调整大小.
尝试在Xcode中创建一个新的基于导航的应用程序,并在RootViewController.xib中研究表视图上的自动调整大小设置.希望您会看到Apple的设置与您在项目中设置的内容之间的差异.
归档时间: |
|
查看次数: |
28891 次 |
最近记录: |