最新iOS适配-转自简书

iOS 12系统目前看来并没有多大变化.不像iOS 11那样增加了新的安全区域概念.在iOS 12中新机型的安全区域概念没有太大变化.

主要就是机型的适配和Xcode10升级后的问题.
首先附上iOS 12支持的所有机型的尺寸.

适配iPhone XR/iPhone XS Max

1.启动图

升级Xcode10后,打印屏幕的宽高:

#define rmScreenW [UIScreen mainScreen].bounds.size.width
#define rmScreenH [UIScreen mainScreen].bounds.size.height

会发现无论是iPhone XS Max还是iPhone XR,打印出来的尺寸高度都是812,这是iPhone X的高度.与真实的新机尺寸不符.

LaunchImage中只有iPhone X/iPhone XS
这可能是Xcode的bug.
项目中使用LaunchImage来做启动图,但是在LaunchImage中并没有iPhone XS Max和iPhone XR,仔细查找后是因为iOS 8.0 and Later没有被选中,当选中iOS 8.0 and Later后,iPhone XR和iPhone XS Max的启动图就会自动出现.
如图:

 

选中后会自动出现.如图:

 

iPhone XS Max和iPhone XR的兼容问题
这主要是因为没有设置iPhone XR/iPhone XS Max启动图,但是设置了iPhone X启动图,iPhone XR/iPhone XS Max启动的时候会使用iPhone X的启动图,并进行拉伸,进而打印出的宽度为375,高度为812,与实际宽高不符.

解决方法:只需要向设计要2张启动图即可:
iPhone XR:828px x 1792px
iPhone XS Max: 1242px x 2688px

2.iPhone XR不支持3D-Touch:

最新的机型iPhone XR是iPhone XS的阉割版,去除了很多功能,手机配置也降低了很多.其中就有3D-Touch.

当使用3D-Touch的时候,如果需要检测是否支持3D-Touch,使用如下代码:
OC:

if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {

}

Swift:

self.traitCollection.forceTouchCapability == .availible

备注:不能使用判断手机是否为6S或6SP等来判断是否支持3D-Touch,因为如果用户在设置 -> 通用 -> 3D Touch中将该功能关闭的话,同样forceTouch是不可用的. 而且此功能必须在运行时随时检查.因为用户可能在使用过程中关闭3D-Touch.

3.代码中判断是否是iPhone X方法

之前很多人判断手机是否是iPhone X的方法是根据手机尺寸来的.因为需要对刘海做特殊处理.现在这种方法可能不行了.
可以根据其他的方法,比如StatusBar或者底部安全距离来判断.

#define rmStatusBarH ([UIApplication sharedApplication].statusBarFrame.size.height)//(44/20)
#define KIsiPhoneX ((rmStatusBarH == 44.0) ? YES : NO)

也可以:

#define isIPhoneXSeries     ([UIScreen instancesRespondToSelector:@selector(currentMode)] ?\
(\
CGSizeEqualToSize(CGSizeMake(375, 812),[UIScreen mainScreen].bounds.size)\
 ||\
CGSizeEqualToSize(CGSizeMake(414, 896),[UIScreen mainScreen].bounds.size)\
)\
:\
NO)

4.升级Xcode10后项目报错

项目中如果使用Cocoapods引用了第三方的库,有可能会升级之后导致编译失败.
由于我项目中没有使用cocoapods,所以没有遇到,网上查了一下资料,大概是因为:

  1. iOS 12移除了libstdc++, 用libc++替代:
  2. 多个 info.plist 会引起崩溃.

可以将多余的info.plist删除
建议方案:

Xcode->File->Project Settings-> Build System -> Legacy Build System.



作者:iOS_xuanhe
链接:https://www.jianshu.com/p/56d7f9cec66d
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"C语言字符串处理库函数大全-简书"是一篇在简书上的教程,介绍了C语言中常用的字符串处理库函数。 该教程详细介绍了C语言中字符串操作的相关函数,包括库函数的使用方法和示例代码。通过该教程,读者可以学习到如何使用C语言中的字符串处理函数来进行字符串的复制、连接、比较、查找、截取等操作。 在这篇教程中,读者可以了解到以下一些常见的字符串处理库函数: 1. strcpy:用于将一个字符串复制到另一个字符串中。 2. strcat:用于将一个字符串连接到另一个字符串的末尾。 3. strlen:用于计算一个字符串的长度。 4. strcmp:用于比较两个字符串的大小。 5. strchr:用于在一个字符串中查找指定字符的第一次出现位置。 6. strstr:用于在一个字符串中查找指定子串的第一次出现位置。 7. strtok:用于将一个字符串按照指定的分隔符分割成多个子串。 8. strncpy:用于将指定长度的字符串复制到目标字符串中。 9. strncmp:用于比较指定长度的两个字符串。 10. sprintf:用于将格式化的字符串输出到一个字符数组中。 这些函数在C语言中非常常用,并且对于字符串的处理非常方便。通过学习和掌握这些字符串处理库函数,可以更加高效地完成C语言程序中的字符串操作。 总之,"C语言字符串处理库函数大全-简书"这篇文章提供了丰富的字符串处理库函数以及示例代码,对于C语言开发者来说是一个很好的参考和学习资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值