ios7导航栏适配

来源:互联网 发布:软件考试考什么 编辑:程序博客网 时间:2024/06/10 02:34

一、

ios7的新特性中出现了一些bug,关于导航栏适配问题,需要调用它的代理方法(UINavigationControllerDelegate)

-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [[UIApplication sharedApplication] setStatusBarHidden:NO];


}

除此之外,还有

 - (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

- (BOOL)prefersStatusBarHidden
{
    return NO;
}
这是ios 7下的状态栏的显示与隐藏,样式的处理方式 
注释:ios6用imagepicker时候状态栏会隐藏。

plist 里设置了   View controller-based status bar appearance   no 防止导航上的字体被隐藏


二、这里借用之前看到的一篇博客的内容,供需要解决此类问题的朋友参考

近期由于IOS7的发布,所以应用的适配潮可谓是都搞的锣鼓喧天,甚是热闹,因此呢,因适配IOS7而产生的问题也是铺天盖地的卷来,所以了,我也从简单的状态栏适配开始,先研究了下关于状态栏的适配,特总结如下,供广大网友一起讨论交流。

PS:首先说明下,ios7中,由于status bar不再占用单独的20px,如果app需要同时支持ios7和ios6.1以下,那就需要适配下了,适配开始:

先看用xcode新建项目后 IOS7和IOS6上的的运行效果:
ps:一个empty application 里面+了一个rootcontroller,作为window的根控制器,view里面放了一个tableview;


是不是遇到的IOS7的新问题,状态栏跟tableview重叠了,OK,看见这个不想看到的结果,下面我们就开始正式的解决掉这个招人不喜欢的效果。

为了达到ios7与ios6.1以下的UI统一,苹果官方给出的建议是:

苹果官方适配建议

第一步:不要勾选xib中的Use Autolayout,如下图:


第二步:第二步:选择View as “ios6.1 and Earlier”,还是上图位置处;

第三步:在Size Inspector中,有一ios6/7 Deltas:分别表示在PosX的增量、PosY的增量、宽度增量、高度增量。


ps:在“ios6.1 and Earlier”模式下,由于status bar的高度为20,所以当app运行在ios7.0模式下时,需要view向下移动20像素,因此在ΔY上设置为20.
tableView坐标向下移动了20,由于整个屏幕的高度是不变的,所以在“ios7.0 and Later”模式下,需要将tableView的高度减去20像素,即在“ios6.1 and Earlier”模式下,设置tableView的ΔHeight为 -20。如果不设置ΔHeight,tableView底部会有20像素是不可见的,可以测试demo看看。
***注***:Δ,正数表示增,负数表示减。

第四步:ok,设置完成,到IOS上看效果:



是不是神奇的发现跟以前的有似曾相识的赶脚呢。。。这样“ios6.1 and Earlier”和“ios7.0 and Later” UI布局便统一了。


三、解决iOS7中,tableView设置UITableViewStyleGrouped后的section之间空余问题

先看效果,未处理之前是这样,大概有一个cell的高度,如下图:


设置完成后,如下图:



看看我的解决办法:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {  

  return 10;

}
大吃一惊了吧,哈哈

据此分析,iOS7在tableView样式设置为UITableViewStyleGrouped后,默认设置了Header高度


0 0
原创粉丝点击