博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS7 兼容适配 如何判断版本号
阅读量:6856 次
发布时间:2019-06-26

本文共 4170 字,大约阅读时间需要 13 分钟。

很多时候我们需要做不同版本的适配,所以首先要进行版本选择

  • 方式一
12345678910111213
NSUInteger DeviceSystemMajorVersion();NSUInteger DeviceSystemMajorVersion() {
static NSUInteger _deviceSystemMajorVersion = -1; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{
_deviceSystemMajorVersion = [[[[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."] objectAtIndex:0] intValue]; }); return _deviceSystemMajorVersion;} #define MY_MACRO_NAME (DeviceSystemMajorVersion() < 7)}
  • 方式二
12345
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
// Load resources for iOS 6.1 or earlier} else {
// Load resources for iOS 7 or later}

新的barTintColor

iOS7 中新增了barTintColor 来取代原有的 tintColor, 现在barTintColor表示对背景色的修改,而原有的tintColor只修改对应bar上的按钮

自定义 UIBarButtonItem 偏移

在iOS7中自定义的 UIBarButtonItem 所有的item向中间偏移了5个像素,所以需要修改alignmentRectInsets来适配, 例如

1234567891011121314
- (UIEdgeInsets)alignmentRectInsets {
UIEdgeInsets insets = UIEdgeInsetsMake(0, 0, 0,0); if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7")) {
if (self.isLeft) {
insets = UIEdgeInsetsMake(0, 5.0f, 0, 0); } else {
// IF_ITS_A_RIGHT_BUTTON insets = UIEdgeInsetsMake(0, 0, 0, 5.0f); } } return insets;}

edgesForExtendedLayout 是什么

edgesForExtendedLayout是一个类型为UIExtendedEdge的属性,指定边缘要延伸的方向。 因为iOS7鼓励全屏布局,它的默认值很自然地是UIRectEdgeAll,四周边缘均延伸,就是说,如果即使视图中上有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域。

如果把视图做如下设置,那么视图就不会延伸到这些bar的后面了.

1
self.edgesForExtendedLayout = UIExtendedEdgeNone;

一些相关的属性

1
automaticallyAdjustsScrollViewInsets = YES

在iOS7中如果视图里面存在唯一一个UIScrollView或其子类View,那么它会自动设置相应的内边距,这样可以让scroll占据整个视图,又不会让导航栏遮盖.

1
extendedLayoutIncludesOpaqueBars = YES

最后一个介绍的新属性是extendedLayoutIncludesOpaqueBars,这个属性指定了当Bar使用了不透明图片时,视图是否延伸至Bar所在区域,默认值时NO。

grouped 的变化

在iOS7 中UITableView的grouped延伸至两边变成了通栏.里面的控件用autolayout来兼容

PS: 一个不是问题的问题,在XCode5中如果是一个xib创建的grouped的tableView,将不会正常显示,需要重新初始化,例如

1234567891011
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
if(self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped]; self.tableView.backgroundView = nil; self.tableView.backgroundColor = TOP_VIEW_COLOR; self.tableView.dataSource = self; self.tableView.delegate = self; } return self;}

一些情况下 window.tintColor 的使用

如果不为窗体指定着色,则会使用系统默认的颜色。

默认情况下,视图的着色是nil,意味着视图使用父级的着色。也就是说哪怕你不设置着色的话,视图也总能够获取到一个色值。

总的来说,最好在视图还没有显示到屏幕上之前指定它的着色。想让视图继承上个层级的着色的话,就将着色设置为nil。

info.plist 中的View controller-based status bar appearance

如果你想要隐藏status bar, 或者用原来的方式修改status bar的颜色.在info.plist中增加这个属性,并且设置为NO

UITextView 的改变

这个请参考 

消失的search bar

PS: 另一个不是问题的问题,把searchBar 当做tableView的header的时候,如果含有UISearchDisplayController,有时候会导致search bar消失. 目前没有找到很好的办法,目前重新初始化可以解决.

1234567
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated]; self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self]; [self.searchController setDelegate:self]; [self.searchController setSearchResultsDataSource:self]; [self.searchController setSearchResultsDelegate:self];}

新的UITableViewCellScrollView

在iOS7之前UITablleViewCell中得contentView得superView就是UITableViewCell。但是在iOS7得时候,contentView得superView确实UITableViewCellScrollView.可以用以下代码来获取

12345678910111213141516
@implementation UIView (GetCellFromContentviewSubview)- (UITableViewCell *)getCellFromContentviewSubview{
if ([[[self superview] superview] isKindOfClass:[UITableViewCell class]]) {
return (UITableViewCell *)[[self superview] superview]; } else if ([[[[self superview] superview] superview] isKindOfClass:[UITableViewCell class]]) {
return (UITableViewCell *)[[[self superview] superview] superview]; } else{
NSLog(@"something Panic happens"); } return nil;}@end

转载地址:http://fliyl.baihongyu.com/

你可能感兴趣的文章
服务器请求
查看>>
java实现屏幕截屏功能
查看>>
实验四--恶意代码技术
查看>>
Golang 并发简介
查看>>
操作系统的启动(以Linux为例)
查看>>
课后作业
查看>>
laravel ORM 命令2
查看>>
java笔记javaweb部分
查看>>
浏览器插件 - 通用注入模版JS
查看>>
android布局学习
查看>>
js中createlement和creatTextnode属性
查看>>
DL4NLP——词表示模型(二)基于神经网络的模型:NPLM;word2vec(CBOW/Skip-gram)...
查看>>
David Freedman统计学书评
查看>>
[转]Becoming a JavaScript ninja
查看>>
java中数据类型转换
查看>>
带上下界的网络流
查看>>
搭建高可用mongodb集群(三)—— 深入副本集内部机制
查看>>
layer.js子窗口关闭并传数据到父窗的方法
查看>>
koa2入门(2) koa-router 路由处理
查看>>
记一次中台数据传输同步Elasticsearch失败的车祸现场
查看>>