iOS-适配iPhoneX相关

屏幕大小

iPhone X 的屏幕宽度同 iPhone 6、iPhone 6s、iPhone 7 和 iPhone 8 的 4.7 英寸屏幕宽度相同,即 375pt。屏幕垂直高度增加了 145pt,增加了 20% 的可视空间。

竖屏规格:1125px × 2436px (375pt × 812pt @3x)
横屏规格:2436px × 1125px (812pt × 375pt @3x)

状态栏

高度增加了24像素

状态栏对比

导航栏高度

导航栏高度是 44 + 44pt

TabBar 和 ToolBar

TabBar高度增加了34像素
UITabBar frame = (0 729; 375 83);
ToolBar高度不变,只是向上偏移了34像素
UIToolbar frame = (0 730; 375 48);

导航栏背景未扩展到状态栏

解决方案:
设置Navigationbar的UIBarPositioningDelegate返回UIBarPositionTopAttached即可。

- (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar {
    return UIBarPositionTopAttached;
} 

App 未全屏显示

LaunchImage 中添加一个和 iPhone X 相关的启动图片 ,图片尺寸:1125 * 2436

Safe Area 大小

竖屏
 UIEdgeInsets
  - top : 44.0
  - left : 0.0
  - bottom : 34.0
  - right : 0.0
横屏
  - top : 0.0
  - left : 44.0
  - bottom : 21.0
  - right : 44.0

Safe Area 要求最低支持 iOS9.0

控制器生命周期之viewSafeAreaInsetsDidChange

  • viewDidLoad
  • viewWillAppear
  • viewSafeAreaInsetsDidChange(NEW)
  • viewWillLayoutSubviews
  • viewDidAppear
    可以在 viewSafeAreaInsetsDidChange 后,设置 Safe Area
if #available(iOS 11.0, *) {
   self.additionalSafeAreaInsets = UIEdgeInsetsMake(10, 0, 0, 34)
}

Xcode9 适配 WKWebViewJavascriptBridge

// 原贴地址:https://github.com/marcuswestin/WebViewJavascriptBridge/issues/278
- (void)webView:(WKWebView *)webView
didFailNavigation:(WKNavigation *)navigation
      withError:(NSError *)error {
    // ……
    // Xcode 升级到9后 WKWebViewJavascriptBridge.m 中有个 bug
    // 需要在"decisionHandler(WKNavigationActionPolicyCancel);"后加上 return,否则崩溃。
    // 不升级 Xcode 的话,没问题。
    decisionHandler(WKNavigationActionPolicyCancel);
    return;
}

与安全区域无关的tableView内容下移问题

如果tableView的style为UITableViewStyleGrouped类型,默认tableView开头和结尾是有间距的,不需要这个间距的话,可以通过实现heightForHeaderInSection方法(返回一个较小值:0.1)和viewForHeaderInSection(返回一个view)来去除头部的留白,底部同理。

iOS 11上发生tableView顶部有留白,原因是代码中只实现了heightForHeaderInSection方法,而没有实现viewForHeaderInSection方法。那样写是不规范的,只实现高度,而没有实现view,但代码这样写在iOS 11之前是没有问题的,iOS 11之后应该是由于开启了估算行高机制引起了bug。添加上viewForHeaderInSection方法后,问题就解决了。或者添加以下代码关闭估算行高,问题也得到解决。

self.tableView.estimatedRowHeight = 0;

self.tableView.estimatedSectionHeaderHeight = 0;

self.tableView.estimatedSectionFooterHeight = 0;

参考 https://cloud.tencent.com/community/article/322940
http://blog.csdn.net/chenyblog/article/details/77987751

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lucy-JY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值