iPhone X + iOS 11 适配指南(下)

简介: iPhone X + iOS 11 适配指南(下)
+关注继续查看

判断 iPhone X 机型 (Swift)



如何判断当前的设备是 iPhone X 呢?有好几种办法,可以考虑取得「iPhone 10,1」这样的 Module Name 来判断,也可以用屏幕分辨率的形式来判断。我觉得要用屏幕分辨率的方式来做,因为这是目前为止最简单也最不容易出错的。因为 iPhone X 只有一种分辨率,那就是 812pt x 375pt (@3x),且没有任何其他设备用了一样的分辨率,特别是高度。

于是写了一个基于 UIDevice 的扩展(或者其他任意方法也行):

extension UIDevice {
       public func isX() -> Bool {
               if UIScreen.main.bounds.height == 812 {
                       return true
               }
               return false
       }
}

在代码中,就可以用 UIDevice.current.isX() 来判断是不是跑在 iPhone X 机型上,然后做一些或不做一些特殊的 Hack 了。

当然如果你习惯用三方库,也可以尝试“DeviceKit”


let device = Device()
print(device)     // prints, for example, "iPhone X"
if device == .iPhoneX {
 // Do something
} else {
 // Do something else
}


代码适配部分


当我们能够判断出设备型号就可以配合系统版本进行适配了


1.适配 UITableView 组件

if (@available(iOS 11.0, *)) {
   self.contentInsetAdjustmentBehavior = .never
   self.estimatedRowHeight = 0
   self.estimatedSectionHeaderHeight = 0
   self.estimatedSectionFooterHeight = 0
} else {
   // Fallback on earlier versions
}


2.适配 UIScrollView 组件

if (@available(iOS 11.0, *)) {
   scrollView?.contentInsetAdjustmentBehavior = .never
} else {
   // Fallback on earlier versions
}


3.UITableView中的sectionHeader或者Footer显示不正常

还有的发现某些界面tableView的sectionHeader、sectionFooter高度与设置不符的问题,在iOS11中如果不实现-tableView: viewForHeaderInSection:和-tableView: viewForFooterInSection:,则-tableView: heightForHeaderInSection:和- tableView: heightForFooterInSection:不会被调用,导致它们都变成了默认高度,这是因为tableView在iOS11默认使用Self-Sizing,tableView的estimatedRowHeight、estimatedSectionHeaderHeight、estimatedSectionFooterHeight三个高度估算属性由默认的0变成了UITableViewAutomaticDimension,解决办法简单粗暴,就是实现对应方法或把这三个属性设为0。


if #available(iOS 11.0, *) {
   tableView.estimatedRowHeight = 0;
   tableView.estimatedSectionHeaderHeight = 0;
   tableView.estimatedSectionFooterHeight = 0;
} else {
   automaticallyAdjustsScrollViewInsets = false;
};


4.适配网页加载不全下面有白边

if #available(iOS 11.0, *) {
   webView.scrollView.contentInsetAdjustmentBehavior = .never
} else {
};


5.适配iPhoneX不能铺满屏的问题

<1>给Brand Assets添加一张1125*2436大小的图片

打开Assets.xcassets文件夹,找到Brand Assets

右键Show in Finder

添加一张1125*2436大小的图片

<2>修改Contents.json文件,添加如下内容

{
"extent" : "full-screen",
"idiom" : "iphone",
"subtype" : "2436h",
"filename" : "1125_2436.png”,
"minimum-system-version" : "11.0",
"orientation" : "portrait",
"scale" : "3x"
}


<3>使用 LaunchScreen.storyboard 设置启动图

使用 LaunchScreen.storyboard 文件将简单视图约束定位,实现各种尺寸的自适应。


6.适配iPhoneX

//适配iPhoneX
let LL_iPhoneX = (kScreenW == Double(375.0) && kScreenH == Double(812.0) ?true:false)
let kNavibarH = LL_iPhoneX ? Double(88.0) : Double(64.0)
let kTabbarH = LL_iPhoneX ? Double(49.0+34.0) : Double(49.0)
let kStatusbarH = LL_iPhoneX ? Double(44.0) : Double(20.0)


7.Xcode9 打包注意事项

Xcode9 打包版本只能是8.2及以下版本,或者9.0及更高版本

Xcode9 不支持8.3和8.4版本

Xcode9 新打包要在构建版本的时候加入1024*1024 AppSore icon

Xcode9 沿用了之前的分包设计,可以配置打出多种设备的包文件,用户安装时根据设备不同分别安装不同的API包,减小安装包大小。



image.png


8.iOS 11 相册权限变更

iOS11以前:

NSPhotoLibraryUsageDescription:访问相册和存储照片到相册(读写),会出现用户授权。

iOS11之后:

NSPhotoLibraryUsageDescription:无需添加。默认开启访问相册权限(读),无需用户授权。

NSPhotoLibraryAddUsageDescription: 添加内容到相册。(写),会出现用户授权。



目录
相关文章
|
9天前
|
小程序 iOS开发
uniapp中IOS端小程序底部黑线适配的方法(整理)
uniapp中IOS端小程序底部黑线适配的方法(整理)
|
2月前
|
开发工具 iOS开发 开发者
iOS 暗黑模式的适配总结
iOS 暗黑模式的适配总结
|
8月前
|
iOS开发 Perl
iOS 屏幕比例适配
iOS 屏幕比例适配
|
8月前
|
iOS开发
iOS - 用Masonry封装的slider,完全支持Masonry的适配
iOS - 用Masonry封装的slider,完全支持Masonry的适配
68 0
|
8月前
|
安全 iOS开发
iOS小技能:下拉刷新控件的适配
1. 下拉顶部背景色设置: 往tableView的父控件添加拉伸背景视图 2. present 半屏适配 iOS13 modalPresentationStyle属性默认不是全屏样式`UIModalPresentationFullScreen`,而是半屏样式,需要根据需求手动设置。 present 半屏,会导致列表下拉刷新失效。
99 0
iOS小技能:下拉刷新控件的适配
|
10月前
|
Web App开发 移动开发 前端开发
HTML5 移动端页面适配 iOS 系统刘海屏
HTML5 移动端页面适配 iOS 系统刘海屏
698 0
HTML5 移动端页面适配 iOS 系统刘海屏
|
JavaScript 前端开发 Android开发
iOS 自动适配的 WebView 封装 (下)
iOS 自动适配的 WebView 封装 (下)
120 0
iOS 自动适配的 WebView 封装 (下)
|
缓存 JavaScript 前端开发
iOS 自动适配的 WebView 封装 (上)
iOS 自动适配的 WebView 封装 (上)
632 0
iOS 自动适配的 WebView 封装 (上)
|
传感器 移动开发 安全
iPhone X + iOS 11 适配指南(上)
iPhone X + iOS 11 适配指南(上)
182 0
iPhone X + iOS 11 适配指南(上)
|
Swift iOS开发
Swift:暗黑模式iOS 13以上支持是否跟随系统和iOS13以下的主题适配
Swift:暗黑模式iOS 13以上支持是否跟随系统和iOS13以下的主题适配
1026 0
Swift:暗黑模式iOS 13以上支持是否跟随系统和iOS13以下的主题适配
相关产品
云迁移中心
推荐文章
更多