iOS开发之 Xcode 9 、iOS11、iPhone X 适配问题

96
WangK_Dev
2017.11.08 17:56* 字数 784

项目上线前一天赶上了iOS正式版发布,于是就。。。适配了下,收集了广大老司机们的技能经验,现在记录了下过程,留作备用。


1. 首先为了tableView的

tableView的界面错乱、组间距也都乱了,需要先关闭计算行高,在appdelegate.m中直接写

   if (@available(iOS 11.0, *)) {
        
        UITableView.appearance.estimatedRowHeight = 0;
        UITableView.appearance.estimatedSectionHeaderHeight = 0;
        UITableView.appearance.estimatedSectionFooterHeight = 0;
    }
    

2. iOS11 之后,跳转App Store评论 这位大佬的经验

在iOS11 之后,会跳的Today 里面 说 无法连接到App Store(这是扯淡的)


image
 NSString *appstoreUrlString = [NSString stringWithFormat: @"itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=%@",AppStoreAppId ];
NSURL * url = [NSURL URLWithString:appstoreUrlString];
if ([[UIApplication sharedApplication] canOpenURL:url]){
        [[UIApplication sharedApplication]openURL:url];
 }else{
        WKLog(@"can not open");
}

要改成:(就链接改了下。。。)

NSString *appstoreUrlString = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/cn/app/idXXXXXX?mt=8&action=write-review", AppStoreAppId ];
NSURL * url = [NSURL URLWithString:appstoreUrlString];
if ([[UIApplication sharedApplication] canOpenURL:url]){
                    [[UIApplication sharedApplication]openURL:url];
 }else{
        WKLog(@"can not open");
}

4.iPhoneX的适配

如果在iPhone X 上启动是 这个鸟样,


image

就需要一张 1125 *2436的图片加入启动页LaunchImage。
如果放进去是这鸟样,说明放错地方了,就跟左边框里一样,随便扔了个地方,


image

这时候就需要 勾选右边箭头那个地方, 就会出来专门放iPhone X的位置,
image

放进去再重新启动,就会发现这个问题是解决了。。。接下来,问题又来了。


image

很明显,图标好多都变形了。。

这是因为我用了宽高比来做适配,之前是写死的 现在需要加上

#define IS_IPHONE_X_HEIGHT         ([[UIScreen mainScreen] bounds].size.height >= 812.0f ? 812.0f : 667.0f)

#define ScaleWidth(width)           width/ 375.0*KSCREEN_WIDTH
#define ScaleHeigth(height)           height/IS_IPHONE_X_HEIGHT*KSCREEN_HEIGHT

#define WKSW(width)           width/375.0*KSCREEN_WIDTH
#define WKSH(height)           height/IS_IPHONE_X_HEIGHT*KSCREEN_HEIGHT

先判断屏幕尺寸,在具体的来搞就行啦。


补充一个不算适配的问题,如果使用LaunchImage做启动,发现在在 4.7 或者5.5的设备上 ,打印出来 屏幕的小小都是4 的尺寸,那就是LaunchImage 设置错了。
如果无法确定哪个地方用哪张 ,保证Portrait 勾选的情况下,一起拖进去,XCode 就会自己给生成,重启模拟器试试 就会发现好了。


image

5 屏幕尺寸更大了。

盗一张图。。。。

iPhone X在宽度上还是 375 ,但是高度上增加了145pt,达到了 812,跟之前的宽高比都变了,这就很尴尬了,之前用宽高比是配的,需要看上面第四条的,动态修改宽高比了。因为iPhone X的分辨率非常高,所以一定要使用@3x的素材,@2x的放上去明显有点别扭,没有3x的 高清,不过一般不仔细找还是分不清楚的。之前使用Masonry,bottom 如果以self.view 为基准的话,这里就会很尴尬了。就会出现这样的情况:


image

这个地方具体怎么搞,就需要跟产品设计一起商量下了。

6,相册权限问题

在iOS11之前,访问相册和保存照片到相册需要用户授权,需要在info.plist添加NSPhotoLibraryUsageDescription这个就行啦 。
而iOS11之后默认开启访问相册权限(NSPhotoLibraryUsageDescription还是要加的,适配iOS11之前), 添加图片到相册需要用户授权,需要添加NSPhotoLibraryAddUsageDescription权限了。

7 上传到App Store

上传到App Store 还需要一个iPhone X的icon,1024的高清的。


image

这些就是我APP上遇到的问题,其他的暂时还没有,之后遇到了再补充。

iOS学习经验