iOS 11 完美适配

在Xcode9以及ios11出来之后,在工作闲暇之余写了点东西来测试一下WWDC更新的一些内容,以下是我的一些分享,有问题或者疑惑的地方可以随时沟通交流。

1.IOS 11的导航栏支持大标题显示
  自动设置,默认是不显示大标题(适配没有特殊需求是不需要处理的),当视图滚动到上面时大标题会消失,小标题会显示出来,跟原来的显示效果一样
  // self.navigationItem.largeTitleDisplayMode =  UINavigationItemLargeTitleDisplayModeAlways;
  // UINavigationItemLargeTitleDisplayModeAutomatic
  // 大标题
  // UINavigationItemLargeTitleDisplayModeAlways
  // 小标题
  // UINavigationItemLargeTitleDisplayModeNever

2.搜索框的添加
  当设置问搜索框后,TableView向上滑动时搜索框就会出现
  self.navigationItem.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];

3.UITableView左滑删除效果添加新方法
  -(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
 }
-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath {
return @"删除";
 }
//  第一种方法 这个是以前我们用的方法
//*8.0之后出现的可以设置左划后显示的内容
 - (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewRowAction *action1 = [UITableViewRowAction rowActionWithStyle:1 title:@"删除" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
    if ([_dataList count]>indexPath.row) {
        [_dataList removeObjectAtIndex:indexPath.row];
        [_tableView reloadData];
    }
}];
action1.backgroundColor = [UIColor redColor];
return @[action1];
 }
// 第二种 ios 11以后新增方法
- ( UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath {
//删除
UIContextualAction *deleteRowAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal title:@"delete" handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
    if ([_dataList count]>indexPath.row) {
        [_dataList removeObjectAtIndex:indexPath.row];
        [_tableView reloadData];
    }
    completionHandler (YES);
}];
deleteRowAction.image = [UIImage imageNamed:@"icon_del"];
deleteRowAction.backgroundColor = [UIColor blueColor];
UISwipeActionsConfiguration *config = [UISwipeActionsConfiguration configurationWithActions:@[deleteRowAction]];
return config;
  }

Xcode9下相册等访问权限问题
之前项目中相机功能一直使用系统自带的PickerView,说实话不甚美观,自己空闲之余一直着手开发自定义相机(EVNCamera:给个StarO(∩_∩)O~)。在Xcode9的首个Beta版本中开发相机功能时发现,原有项目竟然crash,后来发现iOS11下,苹果对相册的权限key做了调整,原来的 NSPhotoLibraryUsageDescription ,在iOS11之后,改成了NSPhotoLibraryAddUsageDescription。详见:Cocoa Keys
✨:不过有童鞋反馈使用Xcode 9 Beta3中打包应用,使用原有相册权限NSPhotoLibraryUsageDescription依旧正常,本人尝试Xcode 9 Beta4中打包,使用原来相册权限的key依旧crash。
近场通讯NFC权限
在iOS11中,苹果开放了NFC(Near field communication),怕也是其推广ApplePay的一种策略。在使用近场通讯时,首先也要在info.plist配置NFCReaderUsageDescription 权限,案例步骤,如下:
iOS 11 Core NFC - any sample code?

以上几点改动效果图如下图所示:
Demo下载地址:(https://github.com/FycGitHub/IOS11AdapterDemo/tree/master)

录屏.gif

下面介绍以下Xcode9 IOS11 在iphoneX上TableView和UIScrollView上面的bug,头部刷新UI出现了错乱,查阅发现 iOS11弃用了automaticallyAdjustsScrollViewInsets属性,新增contentInsetAdjustmentBehavior来替代它
关于 contentInsetAdjustmentBehavior

1.UITableView上面用的SVPullToRefresh下拉刷新显示多出一条,问题如下图所示:
1505987803328.jpg
2.UIScrollView上面也多出一个空白条,问题如下图所示:
1505987964336.jpg
这两个问题统一的解决方法是:分别封装底层的UITableView和UIScrollView 子类继承该类,并实现该方法:
   if (@available(iOS 11.0, *)) {
        self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
    } else {
        // Fallback on earlier versions
    }

最终修改后效果如下所示:

1505988042916.jpg

1505988046867.jpg

以下关于ios11其他方面写的比较不错文章推荐给大家,作者是个
腾讯Bugly: https://mp.weixin.qq.com/s/AZFrqL9dnlgA6Vt2sVhxIw
404你懂得:http://www.jianshu.com/u/ffa5cb2a5d4e
404你懂得:http://www.jianshu.com/p/370d82ba3939

你可能感兴趣的:(iOS 11 完美适配)