一 iOS 11适配
1 UITableView
内容下移20pt
或下移64pt
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;
2 列表/页面偏移
设置工程中的UIScrollView
、UITableView
、UICollectionView
的contentInsetAdjustmentBehavior
属性,如下:
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刘海参数
2 iPhone X信号栏、导航栏、TabBar参数
项目 | 正常高度 | iPhone X高度 |
---|---|---|
UIStatusBar | 20px | 44px |
UINavigationBar | 64px | 88px |
UITabBar | 49px | 83px |
3 苹果设置尺寸
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;})