因为实习原因接触iOS开发,做了一周多点的时间,遇到了一个棘手的需求,也因此了解到了关于iPhone系列适配以及放大模式的有趣规律,涉及到了bounds与native bounds。
“特殊”的需求
当iPhone XS MAX/XR用户使用只适配了iPhone X/iPhone XS,并且隐藏了状态栏的app,同时没有启动放大模式且为竖屏时,进行UI处理。
注:应用的适配是我无法决定的,处理的是一个独立于应用的悬浮窗的UI。只考虑竖屏。
这样表述的需求其实有点绕,解释一下:
1.当iPhone XS MAX/XR用户在放大模式运行应用,我们的UI不会出任何问题;
2.当用户在标准模式运行应用,应用设置隐藏状态栏,UI没有问题;
3.当用户在标准模式运行了只做了X/XS适配的(一般来说就是没有配launch image)应用,会出现UI被MAX“刘海”遮挡问题(其他情况下iPhone都能把UI往下推44单位)。
总结下来,状态栏比较好确定,机型判断也不是问题,所以需求的核心是这样的:
识别出应用只做了X/XS适配并且用户没有开启放大模式的情况。
- 识别出应用只做了X/XS适配 。这里的思路是读取[UIScreen mainScreen] bounds].size(以下简称bounds)的值。
- 用户有没有开启放大模式。当用户开启了放大模式,iPhone也会帮助我们完成UI调整,主要问题在于bounds在只做了低版本适配时的标准与放大模