全屏时隐藏状态栏
在iOS 6中,当调用presentViewController时,默认的modal screen将是全屏(UIModalPresentationFullScreen)。为了在iOS 7中也能获得相同的效果,我们可以在modal controller中添加如下代码:
- (BOOL)prefersStatusBarHidden { return YES;
}
iOS 7中的布局问题
下面是非常简单的一个程序,运行在iOS 6中的界面:
而要是运行在iOS 7的模拟器中,会看不到label了:
这是为什么呢?我们对其reveal一下看看吧:
从上图可以看出,实际上label躲在NavigationBar后面了。在iOS 7中,苹果引入了一个新的属性,叫做[UIViewController setEdgesForExtendedLayout:],它的默认值为UIRectEdgeAll。当你的容器是navigation controller时,默认的布局将从navigation bar的顶部开始。这就是为什么所有的UI元素都往上漂移了44pt。
修复这个问题的快速方法就是在方法- (void)viewDidLoad中添加如下一行代码:
self.edgesForExtendedLayout = UIRectEdgeNone;
这样问题就修复了。