iOS 11、iPhone X、Xcode9适配
遇到的问题
1 启动图变形。
项目采用的是 LaunchScreen.storyboard
当启动视图,LaunchScreen.storyboard
里面加载一个图片填充了整个视图,由于之前的 iPhone
宽高比例差别不到,也就没有注意到图片的变形,今天 在 iPhone X
上图片变形严重。
解决方案:
- 使用
LaunchImage
,但是美工需要切各个不同iPhone
的图片。 - 使用
LaunchScreen.storyboard
,重新设置 图片的约束。设置left、right、top与视图相同,比例设置为原图片比例。然后视图背景设置为与图片边框相同的背景。
2 导航视图上移,被 刘海遮挡
我们项目中的导航视图都是自定义的导航视图,所以会出现这样的问题。 这个解决起来就简单粗暴了。 判断 手机型号,然后重新设置视图高度。
#import "UIDevice+SYHelp.h"
@implementation UIDevice (SYHelp)
+ (BOOL)isiPhoneX
{
if ([UIScreen mainScreen].bounds.size.height == 812)
{
return YES;
}
return NO;
}
+ (BOOL)isiOS11
{
NSString *version = [UIDevice currentDevice].systemVersion;
if (version.floatValue >= 11) {
return YES;
}
return NO;
}
@end
3 MJRefresh 视图不隐藏
这个解决方法就是判断手机型号和系统版本号,然后让视图上移。
BOOL isIphoneX = [UIDevice isiPhoneX];
BOOL isiOS11 = [UIDevice isiOS11];
[mainScrollView mas_makeConstraints:^(MASConstraintMaker *make) {
if (isiOS11) {
make.left.right.bottom.equalTo(self);
if (isIphoneX) {
make.top.equalTo(self).offset(- 44);//兼容mj bug
}else{
make.top.equalTo(self).offset(- 20);//兼容mj bug
}
}else
{
make.edges.equalTo(self);
}
}];
或者也可以使用最新版的 MJRefresh
也许作者已经适配了 iOS 11
。
4 保存图片到本地闪退
iOS 11 如果需要保存图片到相片库中,需要在 info.plist 中增加新的参数 :NSPhotoLibraryAddUsageDescription
,否则保存图片时会闪退。苹果对用户的隐私权限要求越来越严格了。
This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryAddUsageDescription key with a string value explaining to the user how the app uses this data.
<key>NSPhotoLibraryAddUsageDescription</key>
<string>是否允许此App为您添加图片?</string>
Xcode 9
目前使用 Xcode 9
没有发现有特殊需要修改的地方。
使用半天的感受:
- 代码提示更烂了,感觉还不如 8,有时候输入回车键不会自动填充大括号了。
- 使用起来略卡。
- 支持多开模拟器,安装app 也很方便,直接把
.app
文件拖拽就可以安装。
–
总体来说,我们的项目适配的工作量还是很小的,我用了一个下午把两个工程的适配都做好了,主要是我们工程中大量的采用 H5
页面,适配的工作没有那么大。