iOS 7 & iOS 6适配问题

1.状态栏 StatusBar的适配

iOS 7.0以上版本 view的高度包括状态栏 所以要进行版本的适配
方法1:改变view的frame view的高度从-20开始

在iOS7中view默认是全屏模式,状态栏的高度也加在了view的高度上,例如iOS7之前iphone5中self.view.frame.size.height = 548,在iOS7中就是568了,在iOS7中navigationbar是半透明的,statusbar则是全透明的,这样一来,原来的程序用xcode5+iOS7sdk上编译后运行就会出现问题了。

(一)没有导航栏的viewController适配方法

UIButton * btn = nil;
    
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
//        self.view.frame = CGRectMake(0, 20, self.view.bounds.size.width, self.view.bounds.size.height - 20); // 此处不起作用
        
        btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 20, 140, 30)];
    }else {
        btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 140, 30)];
    }
    
    [btn setTitle:@"状态栏适配" forState:UIControlStateNormal];
    [btn setBackgroundColor:[UIColor blackColor]];
    [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
    
    [self.view addSubview:btn];

2.导航栏 NavigationBar的适配

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    
    self.edgesForExtendedLayout = NO; // 取消导航的影响
}

导航栏的默认字体为黑色,但是如果导航栏背景为深色的话就需要来改动字体的颜色了,这时需要重写viewController的setTitle方法:

#pragma mark - 重写setTitle方法
- (void)setTitle:(NSString *)title {

[super setTitle:title];
    
    UILabel * titleView = (UILabel *)self.navigationItem.titleView;
    
    if (!titleView) {
        titleView = [[UILabel alloc] initWithFrame:CGRectZero];
        
        titleView.backgroundColor = [UIColor clearColor];
        titleView.shadowColor = [UIColor colorWithWhite:0.1 alpha:0.5];
        titleView.font = [UIFont boldSystemFontOfSize:20];
        titleView.textColor = [UIColor whiteColor];
        
        self.navigationItem.titleView = titleView;
    }
    
    titleView.text = title;
    [titleView sizeToFit]; // 大小自适应
}

这样就可以根据需要来设置导航栏的字体、颜色、大小、阴影了。如果在每个界面都这么写的话会非常麻烦,可以为viewController增加一个类别方法或者用宏定义来实现。

在IOS7下,如果不设置navigationBar的背景图片,而设置[navigationBar setBarStyle:UIBarStyleBlackTranslucent];可以获取默认的黑色毛玻璃效果

3.UITableView的适配

1.分割线的位置

iOS7之前tableviewd的分割线默认情况下是居左的,宽度和tableview的宽度一样,但是在iOS7中,分割线默认向右移动了10几个像素

#pragma mark - 创建TableView
- (void)createTableView {
    _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height) style:UITableViewStylePlain];
    
    _tableView.delegate = self;
    _tableView.dataSource = self;
    
    // iOS 7之后tableview的分割线向右移了10px 需要设置tableView的separatorInset
    // iOS 6没有此方法
    if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0) {
        _tableView.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0);
    }
    
    _tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
    _tableView.separatorColor = [UIColor purpleColor];
    
    [self.view addSubview:_tableView];
}

如图:

想要调整为居左显示,需要设置一下tableview的属性,    tableview.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0);

但是该属性是在iOS7中才有的,使用时需要判断一下系统的版本号,否则在iOS7之前的设备上运行会出现错误。

2.设置透明色的方法

iOS7之前设置tableview为透明色的时候,只要设置tableview.backgroundColor=[UIColor ClearColor]就行了,但是在iOS7中发现只设置tableview的背景色没有达到透明的效果,还需要设置cell.backgroundColor = [UIColor ClearColor]才可以。

四、UIScrollView

在iOS7中scrollview滚动的时候,上下都可以滚动,即使contensize的高度和内容的高度一样也是如此,设置属性self.automaticallyAdjustsScrollViewInsets = NO就可以了,具体原因还没有搞明白。

注:判断系统版本的宏定义:#define IS_IOS7_SYSTEM [[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0

五、唯一标识符

在iOS6之后,苹果禁用了禁用了UIDevice的uniqueIdentifier方法,所以获取设备唯一标识的方法采用了获取Mac地址然后MD5加密,但是,在iOS7中发现,该方法统一返回02:00:00:00:00:00,所以用做设备的标识符已经没有意义。经过调研、查阅资料和各种方案对比分析,采用了ADID,以下是ADID的特点及使用方法。


提供方


苹果API


用途


广告服务


系统支持


iOS6和iOS7


使用方法


1.     首先在target->Buidl Phases->Link Binary With Libraries中添加AdSupport.framework

2.     在需要使用的文件里包含ASIdentifierManager.h文件

3.     调用advertisingIdentifier 实例方法

代码:NSString *adId = [[[ASIdentifierManagersharedManager]advertisingIdentifier]UUIDString];


返回值发生改变的情况


1.     设置->通用->还原->抹掉所有内容和设置

2.     iOS6: 设置->通用->关于本机->广告->还原广告标识符

3.     iOS7: 设置->隐私->广告->还原广告标识符


返回值不发生改变的情况


1.     设置->通用->还原->还原所有设置

2.     卸载应用程序后重新安装

时间: 2024-07-28 20:25:06

iOS 7 & iOS 6适配问题的相关文章

iOS WKWebview 网页开发适配指南

iOS WKWebview 网页开发适配指南 微信iOS客户端将于2017年3月1日前逐步升级为WKWebview内核,需要网页开发者提前做好网站的兼容检查和适配.如有问题,可参考文末联系方式,向我们咨询. 背景 WKWebView 是苹果在iOS 8中引入的新组件,目的是提供一个现代的支持最新Webkit功能的网页浏览控件,摆脱过去 UIWebView的老.旧.笨,特别是内存占用量巨大的问题.它使用与Safari中一样的Nitro JavaScript引擎,大大提高了页面js执行速度. 切换方

iOS 开发之 - iOS6 适配, UITextField 文本,placeholder没有居中对齐

先上一张图: 为了方便观察,我给UITextField设置了一个背景颜色. 是不是赶脚偏了? 通过一个方法解决: _telTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 如图: 就ok了.. iOS 开发之 - iOS6 适配, UITextField 文本,placeholder没有居中对齐

IOS版本和IPHONE5适配总结

今天花了一天的时间对IOS6和IPHONE5进行适配 [由于自己用的机器是IPHONE5,所以没出什么问题,但是在IPHONE4上就出问题了,都是IOS7版本,还有一台IPOD是IOS6版本,也出问题- 哎,一开始没注意适配,现在得花这精力去修改-  特总结一下,防止以后犯错误,提高工作效率,加油!] 由于习惯问题,都在视图控制器下的viewDidLoad去创建自定义的UI元素,因为IOS版本问题,所以self.view.frame也会不同,如果要实现相同的UI布局,用代码进行测试,发现以下4种

IOS 6和 IOS7适配的一些问题

由于在做一个ios的通用设计平台,那么客户端解析的时候就涉及到一些ios不同版本,不同分辨率的适配问题 首先碰到的就是navigation bar中的item的背景色的问题 在ios7中设置settintcolor背景是透明的,图标和字默认是白色的,效果不错,但是在ios 6是,背景色也被设置成了白色,还加了边框,难看了,那怎么办呢,目前还正在摸索中啊 第二个问题就是色彩的透明度的问题,比较奇怪,在设置tableview的cell的背景色的时候,初始时是一样的,点着点着就不一致了,在ios 6和

iOS 开发之 - iOS6适配 - 导航栏按钮透明方法

首先上张图: 1:ios6导航栏默认按钮 rightBarButtonItem   是不是很丑的赶脚? 现在通过以下方法来改变以下:code: UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeCustom]; rightButton.frame = CGRectMake(0, 0, 40, 40); [rightButton setTitle:@"提交" forState:UIControlStateNormal

iOS:iOS开发非常全的三方库、插件、大牛博客等等

iOS开发非常全的三方库.插件.大牛博客等等 github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自github:https://github.com/Tim9Liu9/TimLiu-iOS UI 下拉刷新 EGOTableViewPullRefresh- 最早的下拉刷新控件. SVPullToRefresh- 下拉刷新控件. MJRefresh- 仅需一行代码就可以为UITableView或

iOS开发--iOS及Mac开源项目和学习资料

文/零距离仰望星空(简书作者)原文链接:http://www.jianshu.com/p/f6cdbc8192ba著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 原文出处:codecloud UI下拉刷新EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字

【IOS】IOS快速入门之OC语法

Objective-C 是 C 语言的超集 您还可以访问标准 C 库例程,例如在 stdlib.h 和 stdio.h 中声明的那些例程. Objective-C 还是一种非常动态的程序设计语言,而且这种动态是其最大优势.这种动态体现在它允许在运行应用程序时(即运行时)才去确定其行为,而不是在生成期间就已固定下来.因此,Objective-C 的动态机制让程序免受约束(编译和链接程序时施加的约束):进而在用户控制下,将大多数符号解析责任转移到运行时. 当您想要在源代码中包括头文件时,请在头文件或

iOS还是IOS?

iOS还是IOS 看过很多朋友写博客有时会写成IOS,自己也没有在意过,直到有一天赶X网的一个妹子告诉我iOS才是对的,面试的时候我们会关注这个细节的.于是匆匆忙忙把以前的东西都改了.i就是iPhone的i,OS是系统. 如果你负责面试别人那么你可以装逼地告诉别人: IOS :CISCO开发用于网络设备的操作系统iOS :是由苹果公司为移动设备所开发的操作系统,支持的设备包括iPhone.iPod touch.iPad.Apple TV. 仅在此做一条极短记录.

IOS UIDevice & IOS检测屏幕旋转实例

一 UIDevice 简介 UIDevice类提供了一个单例实例代表当前的设备.从这个实例中可以获得的信息设备,比如操作系统名称.电池电量值(batteryLevel).电池状态(batteryState).设备的类型(model,比如iPod.iPhone等).设备的系统(systemVersion) 二 获取 UIDevice 实例 通过[UIDevice currentDevice]可以获取这个单粒对象 UIDevice *device = [UIDevice currentDevice]