tl; dr:如果应用程序显示状态栏,则在拍照时旋转iPad时用户界面布局会中断.
我有一个应用程序,显示一个状态栏,应该拍摄照片UIImagePickerController.
我在带有Xcode 4.51的iPad 3,iOS 6上运行它
我注意到的第一个问题是,如果我没有通过隐藏状态栏
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
Run Code Online (Sandbox Code Playgroud)
在致电之前
[self presentViewController:imagePicker animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
然后UIImagePickerController将无法在屏幕上正确显示.状态栏的空间仍将被保留(但没有显示时间或电池信息等),结果是屏幕下端的控件将部分偏离屏幕.
所以,我添加了这条线
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
Run Code Online (Sandbox Code Playgroud)
在提出之前UIImagePickerController,第一个问题就解决了.
现在出现了第二个问题(由第一个问题的解决方案引起).当我提出的UIImagePickerController,旋转iPad和关闭(通过"取消"或"使用",无所谓),该处理器(无论是imagePickerControllerDidCancel或 imagePickerController:didFinishPickingMediaWithInfo:将被调用,在我再次显示状态栏,通过
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
Run Code Online (Sandbox Code Playgroud)
问题是现在状态栏显示,但应用程序的其余部分似乎不知道它再次出现在屏幕上.(我在"MainViewController"上的UIToolbar部分隐藏在状态栏后面.)有趣的是,如果我将iPad旋转到任何其他方向,则在动画结束后再次正确显示.
谁能给我任何关于如何解决这个问题的提示?(目前我最好的工作是在第一次有人拍照后隐藏状态栏,但那是次优的).也许对第一个问题有更好的解决方案,或者可能是解决这两个问题的方法.
更多信息:在UIImagePickerController激活时将iPad旋转到横向,这是我的MainViewController视图框架的框架:{{0,0},{1024,768}}(即在出现问题的情况下).当我一直以横向方向放置iPad时,这是UIImagePickerController被取消后的MainViewController的视图框架:{{0,0},{1024,748}}(这是没有问题的情况.)
提前感谢您的关注和努力!
环境: iOS 6/7,Xcode 5中的AutoLayout.
我知道要调整NavBar以容纳状态栏,我将NavBar的背景图像设置为64位高(参考:WWDC 2013视频讲座#214).

有没有一种方便的方法来切换这个状态栏的存在,同时重新定位 NavBar向上冲洗容器视图(反之亦然)?
添加了关注:我需要同时使用iOS 6和7.
iOS 6具有可靠的状态栏.因此,我必须在iOS 7中更改NavBar的背景图像以自动容纳状态栏......或者
......我是否正确我只能将状态栏设置为OPAQUE以在iOS 6/7中具有相似的定位环境?
我的应用程序背景较暗,但在iOS 7中,状态栏变得透明.所以我看不到任何东西,角落里只有绿色电池指示灯.如何将状态栏文本颜色更改为绿色或橙色,就像在主屏幕上一样?
我知道
在plist中设置UIViewControllerBasedStatusBarAppearancetoYES
在viewDidLoad做一个[self setNeedsStatusBarAppearanceUpdate];
添加以下方法:
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
Run Code Online (Sandbox Code Playgroud)如何以UIViewControllerBasedStatusBarAppearance编程方式更改?
提前致谢...
在某些UIViewController,UINavigationBar隐藏在状态栏下。这是屏幕截图:
但是当我更改View controller-based status bar appearance为YESthen 时UINavigationBar看起来很完美。这是屏幕截图:
但在这种情况下,textColorofstatus bar会从白色变为黑色。我想要状态栏的白色文本颜色,并UINavigationBar从状态栏中取消隐藏。有没有办法解决它(状态栏的白色和取消隐藏UINavigationBar)。
提前致谢!
我需要一个透明的状态栏,如下图所示。
我试过了
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
statusBar.backgroundColor = [UIColor clearColor];
}
Run Code Online (Sandbox Code Playgroud)
但这基本上给出了与UIStatusBarStyleLightContent相同的结果。
uinavigationbar uinavigationcontroller ios uistatusbar swift
info.plist
<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>
Run Code Online (Sandbox Code Playgroud)
UIViewController
override var prefersStatusBarHidden: Bool{
return true
}
Run Code Online (Sandbox Code Playgroud)
当我使用6p时,可以,但是
iphoneX不能调用,并且StatusBar不隐藏
我需要根据方向更改视图的图像背景.为此,我使用statusBarOrientation方法viewWillAppear:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
UIInterfaceOrientation currentOrientation = [[UIApplication sharedApplication] statusBarOrientation];
if (UIInterfaceOrientationIsPortrait(currentOrientation)) {
NSLog(@"PORTRAIT");
} else if (UIInterfaceOrientationIsLandscape(currentOrientation)) {
NSLog(@"LANDSCAPE");
}
}
Run Code Online (Sandbox Code Playgroud)
问题是控制台总是显示PORTRAIT,即使iPad处于横向模式.相同的代码viewDidAppear工作正常,但为时已晚,用户可以看到图像的变化.这让我觉得statusBarOrientation的正确状态仍然不可用viewWillAppear,但我已经读过其他一些问题,这段代码应该在那里工作.
我使用iOS7自定义过渡以模态方式呈现新的视图控制器.
新的视图控制器是导航控制器.
控制器从底部开始动画,而背景视图模糊.
我的问题是,新控制器上的导航栏虽然向上动画,但似乎允许状态栏,即它似乎高64点.当它到达最终位置并调用completeTransition时,它意识到不需要状态栏空间并快速回到44点.
有办法吗?
动画制作时:

动画完成:

我正在尝试使用UIView动画将状态栏样式从UIStatusBarStyleDefaultContent转换为UIStatusBarStyleLightContent,但是,样式只是在没有淡入淡出动画的情况下切换.我认为使用以下方式设置样式会起作用:
[UIView animateWithDuration:1.0
delay:0.0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[self.view layoutIfNeeded];
} completion:nil];
Run Code Online (Sandbox Code Playgroud)
我不知道如何得到我想要发生的事情.基本上,我的内容从黑暗变为浅,所以我需要更改状态栏颜色.默认情况下,它不能按我想要的方式工作.任何帮助深表感谢.
谢谢!
这是我在子类中的实现UIViewController:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: false)
}
Run Code Online (Sandbox Code Playgroud)
我尝试将它放在AppDelegate初始化代码中(使用传入的UIApplication实例),但状态栏仍为黑色..
这是iOS 8的错误还是我做错了?
注意:我可能会通过讨论ios 8来破坏某人的法律.它是一个普遍的问题,当编译时也不适用于ios 7.
更新:仍然不起作用,即使Info.plist和代码中的值 - didFinishLaunchingWithOptions

uistatusbar ×10
ios ×7
ios7 ×4
swift ×3
autolayout ×1
autorotate ×1
ios8 ×1
iphone ×1
iphone-x ×1
objective-c ×1
xcode5 ×1