在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)
下面介绍以下Xcode9 IOS11 在iphoneX上TableView和UIScrollView上面的bug,头部刷新UI出现了错乱,查阅发现 iOS11弃用了automaticallyAdjustsScrollViewInsets属性,新增contentInsetAdjustmentBehavior来替代它
关于 contentInsetAdjustmentBehavior
1.UITableView上面用的SVPullToRefresh下拉刷新显示多出一条,问题如下图所示:
2.UIScrollView上面也多出一个空白条,问题如下图所示:
这两个问题统一的解决方法是:分别封装底层的UITableView和UIScrollView 子类继承该类,并实现该方法:
if (@available(iOS 11.0, *)) {
self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
// Fallback on earlier versions
}
最终修改后效果如下所示:
以下关于ios11其他方面写的比较不错文章推荐给大家,作者是个
腾讯Bugly: https://mp.weixin.qq.com/s/AZFrqL9dnlgA6Vt2sVhxIw
404你懂得://www.greatytc.com/u/ffa5cb2a5d4e
404你懂得://www.greatytc.com/p/370d82ba3939