ios7适配一些问题

来源:互联网 发布:d3.js demo 编辑:程序博客网 时间:2024/05/16 18:06

1.      如何判断版本

如果你已经开发过ios旧版本的app,现在想适配在ios7上,那如何判断现在的版本类型是一个很有用的办法:

[[[UIDevice currentDevice] systemVersion] floatValue] < 7.0  //如果当前ios版本小于7

通过该判断你可以写出针对于ios7的分支代码出来,对于一些细节的问题非常有用。

2.      布局问题

ios7适配中,布局问题是一个很头痛也很重要的问题,因为在ios7viewController使用了全屏布局的方式,也就是说导航栏和状态栏都是不占实际空间的,状态栏默认是全透明的,导航栏默认是毛玻璃的透明效果。

如果在ios7中加入一个view,我们可以看到以下代码的效果:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,100,100)];

[label setText:@”大家好”];

[label setTextColor:[UIColor blueColor]];

[label setBackgroundColor:[UIColor blueColor]];

[self.view addSubview:label];

方案一:

self.navigationController.navigationBar.translucent = NO;

这句话的意思就是让导航栏不透明且占空间位置,所以我们的坐标就会从导航栏下面开始算起。

方案二:

       self.edgesForExtendedLayout = UIRectEdgeNone;

    edgesForExtendedLayoutios7的新属性,所以在ios7以下设备会出现奔溃现象,解决办法就是先判断在使用,可以通过判断系统版本,也可以通过判断方法是否可使用

if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])

edgesForExtendedLayout默认的值是UIRectEdgeAll就是全部布局的意思,改成UIRectEdgeNone就会和ios7一起的系统版本一样的效果

方案三:

ios7单独定制位置,通过判断系统版本,个性为ios7定制位置。

       const BOOL is_ios7 = [[[UIDevice currentDevice] systemVersion] floatValue] < 7.0;

       int y= is_ios7 ? 64 : 0;

3.      UITableView样式

ios开发中UITableView是最常用的控件,ios7对于UITableView的改动也是非常大的。

1.布局上

上面说的ios7的初始化位置都是从屏幕开始的,但是如果你使用UITableView全屏显示会发现他的位置是正确的,而且导航栏的毛玻璃效果闪闪发亮。那是因为在ios7controller中增加了automaticallyAdjustsScrollViewInsets 属性,默认值为YES。他的作用就是如果视图中有唯一的ScrollView存在,那么它会自动改变ScrollViewcontentView的位置,让其不会让导航栏挡住,也能让ContentView移上去的时候在导航栏后面显示。

当然,然后视图里的ScrollView不满足系统的要求,我们就需要自己控制contentView的位置了:

UIEdgeInsets contentInset = self.tableView.contentInset;

contentInset.top = 64;

[self.tableView setContentInset:contentInset];

这样也就是达到了automaticallyAdjustsScrollViewInsets属性的效果

2.样式上

ios7上的tableView样式有很大的改动,尤其是grouped样式下。

我们可以看到ios7cell的分割线是默认不会画满的,空出的位置大小是会根据cell.imageView的大小决定了。如果你他能跟ios6一样的效果,值需要将cellseparatorInset属性的left值改成0即可。


4.      statusBar修改样式

大家可能发现了在ios7statusBar的颜色明明可以有下面几种选择的但是缺没有效果。

UIStatusBarStyleDefault      默认色,随背景颜色深浅改变,优先黑色

UIStatusBarStyleLightContent  随背景颜色深浅改变,优先白色

UIStatusBarStyleBlackTranslucent 黑色透明

解决方法:

第一步:Plist里面添加 UIViewControllerBasedStatusBarAppearance 设置为:NO        
第二步:在入口类中写:[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 

5.      其他问题

UILable背景问题

           ios7UILable的背景默认是clearColor,而ios6中默认是白色

UIButton样式问题

ios7UIButton默认是没有背景框的,在ios6中有明显的默认边框

         更多ios7配置位置请下载《iOS 7 UI Transition Guide


转载:http://www.th7.cn/Program/IOS/201406/213991.shtml

0 0
原创粉丝点击