美文网首页
iOS 11系统适配及iPhone X屏幕适配

iOS 11系统适配及iPhone X屏幕适配

作者: 子懿黎昕 | 来源:发表于2018-11-16 13:57 被阅读0次

Safe Area Layout Guide before iOS 9.0

用Xcode 9 创建storyboard或者xib时,最低版本支持iOS 8时会报: Safe Area Layout Guide before iOS 9.0 如图:

Safe Area Layout Guide before iOS 9.0

原因:在iOS7中引入的Top Layout Guide和Bottom Layout Guide,这些布局指南在iOS 11中被弃用,取而代之的是Safe Area Layout Guide.

解决办法:适配最低支持版本iOS 8,将图中的 Use Safe Area Layout Guide 取消即可

取消勾选

UITableView、UIScrollView、UICollectionView位置偏移

UITableview、UIScrollView、UICollectionView莫名奇妙的偏移20pt或者64pt, 原因是iOS11弃用了automaticallyAdjustsScrollViewInsets属性,取而代之的是UIScrollView新增了contentInsetAdjustmentBehavior属性

解决办法:

第一种

if (@available(iOS 11.0, *)) {

self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;

}

else {

self.automaticallyAdjustsScrollViewInsets = NO;

}

第二种

在AppDelegate的didFinishLaunchingWithOptions方法中添加

if(@available(iOS11.0, *)){        [[UIScrollViewappearance]setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];    }

iOS 11中如果不实现-tableView: viewForFooterInSection:和 -tableView: viewForHeaderInSection:,那么-tableView: heightForHeaderInSection:和- tableView: heightForFooterInSection:不会被调用。

这是因为estimatedSectionHeaderHeight,estimatedSectionFooterHeight高度估算属性由默认的0变成了UITableViewAutomaticDimension,导致高度计算不对,解决方法是实现对应方法或把这两个属性设为0。

iPhone X启动图没有充满屏幕

如果你的APP在iPhoneX上运行发现没有充满屏幕,上下有黑色区域,那么你应该也像我一样LaunchImage没有用storyboard而是用的Assets,解决办法如图,启动图的尺寸为1125x2436

添加iPhone X 启动图

添加1024尺寸的icon图

APP Store 1024pt

关于滑动手势方法

在iOS8中滑动删除方法如下

- (nullableNSArray<UITableViewRowAction*> *)tableView:(UITableView*)tableView editActionsForRowAtIndexPath:(NSIndexPath*)indexPathNS_AVAILABLE_IOS(8_0)__TVOS_PROHIBITED;

在iOS 11中替换editActionsForRowAtIndexPath方法为如下方法

- (nullableUISwipeActionsConfiguration*)tableView:(UITableView*)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath*)indexPathAPI_AVAILABLE(ios(11.0))API_UNAVAILABLE(tvos);

- (nullableUISwipeActionsConfiguration*)tableView:(UITableView*)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath*)indexPathAPI_AVAILABLE(ios(11.0))API_UNAVAILABLE(tvos);

根据系统版本使用相应的方法

一些常用的宏定义

#define kStatusBarHeight [[UIApplication sharedApplication] statusBarFrame].size.height

#define kTopHeight44.0

#define kNavigationBarHeight (kStatusBarHeight + kTopHeight)

#define kTabBarHeight ([[UIApplication sharedApplication] statusBarFrame].size.height>20?83:49)

#define IS_IPHONEX ([[UIScreen mainScreen] bounds].size.height == 812 || [[UIScreen mainScreen] bounds].size.height == 896)

相关文章

网友评论

      本文标题:iOS 11系统适配及iPhone X屏幕适配

      本文链接:https://www.haomeiwen.com/subject/fgzpfqtx.html