1、缺少iPhone X的启动图
在 xcassets 中添加LaunchImage,他里面就会出现 iPhoneX的启动图。
2、导航栏的自定义返回按钮样式不对(主要分两种)
a、自定义backBarButtonItem
backBarButtonItem 的图片会很怪异,这是在iOS 11时改变了里面的布局,使用下面的代码可以解决.
@implementation UIViewController (CustomBackBarButtonItem)
- (void)customBackBarButtonItem {
if (@available(iOS 11.0, *)) {
UIImage *image = [[UIImage imageNamed:@"ic_return"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithTitle:@""
style:UIBarButtonItemStylePlain
target:nil
action:nil];
self.navigationItem.backBarButtonItem = backButtonItem;
self.navigationController.navigationBar.backIndicatorImage = image;
self.navigationController.navigationBar.backIndicatorTransitionMaskImage = image;
} else {
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithTitle:@""
style:UIBarButtonItemStylePlain
target:nil
action:nil];
UIImage *image = [UIImage imageNamed:@"ic_return"];
UIImage *highlightedImage = [UIImage imageNamed:@"ic_return"];
[backButtonItem setBackButtonBackgroundImage:[image resizableImageWithCapInsets:UIEdgeInsetsMake(0, image.size.width, 0, 0)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[backButtonItem setBackButtonBackgroundImage:[highlightedImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, image.size.width, 0, 0)] forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
[backButtonItem setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault];
self.navigationItem.backBarButtonItem = backButtonItem;
}
}
b、自定义leftBarButtonItems
在iOS 11下面我们怎么也无法正常的把返回的按钮尽可能的往左靠近,他就是那么坚挺的偏右,使用下面的方法解决.
1 | UIBarButtonItem *rightBarItem = [[UIBarButtonItem alloc] initWithImage:self.configuration.moreItemImage style:UIBarButtonItemStylePlain target:self action:@selector(onTappedMoreItem:)]; |
主要是的起作用的代码是
1 | if (@available(iOS 11.0, *)) { |
3、tableView
磨人的小妖精呀,基本上项目中遍地都是tableview,但是这次她出了问题!
a、groupe 样式下的 setion header \ footer 高度很大,解决办法
_tableView.estimatedRowHeight = 0;
_tableView.estimatedSectionHeaderHeight = 0;
_tableView.estimatedSectionFooterHeight = 0;
b、push 动画进来的时候,会有明显的从下往上偏移的动画,解决办法
1 | if (@available(iOS 11.0, *)) { |
c、有时候 UITableView 与他里面的容器view (UITableViewWrapperView) 大小不一致,不管你怎么调整tableveiew的
布局,死活是莫名其妙的有 20 的差距,使用下面的代码解决(这个不是iOS 11的适配,反而ios 11 下面没有)
1 | if ([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)]) { |
4、搜索框调整
iOS 11 使用新方法将搜索框附着到导航栏上。它需要把UISearchController赋值给navigationItem,看下面的代码
1 | self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; |
5、导航栏的高度
对于需要计算顶部高度的地方,应该动态获取状态栏和导航栏高度:
1 |
|
对于需要计算 iPhone X 底部 homeIndicator 高度的地方,可以使用下面的代码:
1 |
|
对于使用 Masonry 写 autoLayout 的,可以像下面这样:
1 | [self.webView mas_makeConstraints:^(MASConstraintMaker *make) { |
总结
目前基本上主要也就是这些地方需要适配,对于那些支持横屏的应用,那就要多少考虑一下安全区域了,如果只是竖屏应用,其实只要解决好
tableview的安全适配基本上就没有什么问题了。