1. 隐藏tabbar出现黑色区域的问题。
IOS7下,想做成tabbar向下滑动隐藏的效果,结果原来的tabbar的地方留下一块黑色区域,网上找了很多办法都没有解决,让我痛恨。无奈,自己定制了一个tabbar来实现滑动隐藏,效果还不错。
2. 打开相册和相机时状态栏不隐藏的问题
IOS7要隐藏状态栏,需要在info.plist文件中添加View controller-based status bar appearance ,并且把值设置为NO。
但是打开相册或相机的时候,状态栏还是透明显示出来了,在网上找了一下解决方案,终于解决了。
在使用了UIImagePickController的controller里或者UIImagePickController的子类里添加如下代码。其中JKIsIOS7OrLater()是判断当前设备的版本号是不是ios7。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (JKIsIOS7OrLater()) {
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];
}
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
if (JKIsIOS7OrLater()) {
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];
}
}
BOOL JKIsIOS7OrLater(void)
{
if ([[[UIDevice currentDevice] systemVersion] floatValue]>= 7.0) {
return YES;
} else {
return NO;
}
}
3. IOS7 UIVIewController 的view的高度问题
devdiv上有这样一段
之前的版本中UIViewController中的view在显示后会自动调整为去掉导航栏的高度的。这样我们摆放控件的时候就会在导航栏的下面显示。但是在iOS7中UIViewController的wantsFullScreenLayout已经被舍弃了,不再提供此属性,所有的UIViewController创建后默认就是full Screen的,因此如果带导航栏的应用界面中的部分控件会被导航栏覆盖掉。
要解决这中情况可以使用iOS7中UIViewController新增的属性extendedLayoutIncludesOpaqueBars和edgesForExtendedLayout来解决。其中这个属性指定了当Bar使用了不透明图片时,视图是否延伸至Bar所在区域,默认值时NO。而edgesForExtendedLayout则是表示视图是否覆盖到四周的区域,默认是UIRectEdgeAll,即上下左右四个方向都会覆盖,那么为让顶部不进行延伸到导航栏覆盖的区域,我们可以把顶部区域延伸去掉。实现代码如下:
self.extendedLayoutIncludesOpaqueBars = NO;
self.edgesForExtendedLayout = UIRectEdgeBottom | UIRectEdgeLeft | UIRectEdgeRight;
我在做的时候发现viewDidLoad的时候view的高度还是全屏,viewWillAppear已经去掉navigationbar了,所以frame的设置放在了viewWillAppear中比较准确。