iOS兼容性问题处理

2017-11-02 » iOS开发基础

iOS 11 新东西

下面文章基本都已经介绍

你可能需要为你的APP适配iOS11

补充一部分内容

1、bigTitle 自动缩放,当你设置tableView的时候,会自动缩放,largeTitleTextAttributes 可以设置自定义bigTitle属性

2、打开图层,我们可以看到小标题其实还在,只是被隐藏

bigTitleView:_UINavigationBarLargeTitleView

smallTitleView :_UINavigationBarContentView

所以如果我们这个时候替换navigationItem的titleView 其实只能替换  _UINavigationBarContentView

3、添加搜索很方便 navigationItem.searchController = UISearchController(searchResultsController: nil)

IOS 11上可以直接使用约束自动布局控制Navigationitem的大小、之前系统需要固定frame

IOS 11以前 tableView中又一层私有api

tableview的uitableViewwrapperView下移 tableHeadView

IOS 11 动态变更 Navigationitem 中的图片,会影响布局,原因就是约束问题,btn中得图片受约束影响,当图片下载回来后,图片的大小影响导致按钮被放大,从而影响布局

[weakSelf.customBtn.imageView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.width.height.mas_equalTo(26);
    make.bottom.equalTo(weakSelf.customBtn).offset(-10);
    make.left.equalTo(weakSelf.customBtn).offset(10);
    make.right.equalTo(weakSelf.customBtn).offset(-10);
    make.top.equalTo(weakSelf.customBtn).offset(10);
}];

iPhone X 新东西

iPhoneX适配

美团的适配

1.相册访问权限
iOS11上系统默认打开了用户相册的访问权限,但是当你保存图片时APP就会crash,原因是需要在info.plist再申明一个NSPhotoLibraryAddUsageDescription的key,同时为了兼容iOS11以前的机型,保留以前NSPhotoLibraryUsageDescription的key

动态获取iphoneX影响得到的导航高度、toolbar的高度
static let navigationMargin: CGFloat = UIApplication.shared.statusBarFrame.size.height + 44

UITableView点击失效

IOS 不能触发didSelectRowAtIndexPath事件的原因

调试事件丢失的方法:

可能原因:

  • delegate没有设置。
  • 可能tableview被其他控件覆盖。
  • 添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效,两者之间手势发生冲突。

答案:

  • 前两种情况有没有问题,有的话解决掉,没有就跳过。
  • 如果前两种情况都不是,那看看是不是你在什么地方添加了手势,如果添加了可能原因是: UITapGestureRecognizer截获了touch事件,导致didSelectRowAtIndexPath方法无法响应。 查阅了相关文档后找到了一种可行的解决方法:重写UIGestureRecognizerDelegate中的- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch方法。

http://blog.gocy.tech/2016/11/19/iOS-touch-handling/

https://github.com/SwipeCellKit/SwipeCellKit/issues/48

UISwipeDismissalGestureRecognizer

适配 https://juejin.im/post/5b1a9e32518825137e13ac3e