iOS 11 和 iPhone X 适配

一 iOS 11适配

1 UITableView 内容下移20pt或下移64pt

self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;

2 列表/页面偏移

设置工程中的UIScrollViewUITableViewUICollectionViewcontentInsetAdjustmentBehavior属性,如下:

if (@available(iOS 11.0, *)){
        self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
    }

总的来说所有继承与Scrollview 及其子类都需要设置 contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever ,每个设置很麻烦,没关系。由于UIView及其子类都遵循UIAppearance协议,我们可以进行全局配置:

// AppDelegate 进行全局设置
if (@available(iOS 11.0, *)){
        [[UIScrollView appearance] setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
    }

二 iPhone X适配

1 iPhone X刘海参数

iOS 11 和 iPhone X 适配_第1张图片
iPhone X刘海参数.png

2 iPhone X信号栏、导航栏、TabBar参数

项目 正常高度 iPhone X高度
UIStatusBar 20px 44px
UINavigationBar 64px 88px
UITabBar 49px 83px

3 苹果设置尺寸

iOS 11 和 iPhone X 适配_第2张图片
苹果设置尺寸.png

4 安全区域最终涉及类的属性和方法

UIView类
safeAreaInsets
safeAreaLayoutGuide
- (void)safeAreaInsetsDidChange;

UIViewController类
- (void)viewSafeAreaInsetsDidChange;

5 适配过程中的几个宏

//屏幕的宽
#define MainScreenWidth [UIScreen mainScreen].bounds.size.width
//屏幕高
#define MainScreenHeight [UIScreen mainScreen].bounds.size.height
//iPhoneX判断
#define iPhoneX (MainScreenWidth == 375.f && MainScreenHeight == 812.f ? YES : NO)
//状态栏的高度
#define StatusBarHeight (iPhoneX ? 44.f : 20.f)
//导航栏的高度
#define NavigationBarHeight 44.f
//信号栏加导航栏的高度
#define StatusBarAndNavigationBarHeight (StatusBarHeight + NavigationBarHeight)
//tabar高度
#define TabbarHeight (iPhoneX ? (49.f+34.f) : 49.f)
//View安全区 iPhone X用
#define ViewSafeAreInsets(view) ({UIEdgeInsets insets; if(@available(iOS 11.0, *)) {insets = view.safeAreaInsets;} else {insets = UIEdgeInsetsZero;} insets;})

参考

10分钟适配 iOS 11 & iPhone X
iOS 11 安全区域适配总结

你可能感兴趣的:(iOS 11 和 iPhone X 适配)