[UIScreen mainScreen].bounds的值不正确?iphone放大模式以及标准模式的坑

今天同事写代码的时候,发现[UIScreen mainScreen].bounds取出的值和预想的不一样,搞了好长时间,才发现了当前手机使用的放大模式(设置->显示与亮度->放大标准,4.7寸及以上才可以设置),使用了放大模式之后[UIScreen mainScreen].bounds取出的值就有问题了。

下面是在不同机型的不同模式下打印的bounds、nativeBounds、currentMode的值

  • IPhone 6Plus 标准
(lldb) po [UIScreen mainScreen].bounds
(origin = (x = 0, y = 0), size = (width = 414, height = 736))

(lldb) po [UIScreen mainScreen].nativeBounds
(origin = (x = 0, y = 0), size = (width = 1080, height = 1920))

(lldb) po [UIScreen mainScreen].currentMode
<UIScreenMode: 0x2823fb7a0; size = 1242.000000 x 2208.000000>
  • IPhone 6Plus 放大
(lldb) po [UIScreen mainScreen].bounds
(origin = (x = 0, y = 0), size = (width = 375, height = 667))

(lldb) po [UIScreen mainScreen].nativeBounds
(origin = (x = 0, y = 0), size = (width = 1080, height = 1920))

(lldb) po [UIScreen mainScreen].currentMode
<UIScreenMode: 0x2803d6700; size = 1125.000000 x 2001.000000>
  • IPhone 6 标准
(lldb) po [UIScreen mainScreen].bounds
(origin = (x = 0, y = 0), size = (width = 375, height = 667))

(lldb) po [UIScreen mainScreen].nativeBounds
(origin = (x = 0, y = 0), size = (width = 750, height = 1334))

(lldb) po [UIScreen mainScreen].currentMode
<UIScreenMode: 0x109edd6c0; size = 750.000000 x 1334.000000>
  • IPhone 6 放大
(lldb) po [UIScreen mainScreen].bounds
(origin = (x = 0, y = 0), size = (width = 320, height = 568))

(lldb) po [UIScreen mainScreen].nativeBounds
(origin = (x = 0, y = 0), size = (width = 750, height = 1334))

(lldb) po [UIScreen mainScreen].currentMode
<UIScreenMode: 0x113b1f6f0; size = 640.000000 x 1136.000000>
  • iPhone 5
(lldb) po [UIScreen mainScreen].bounds
(origin = (x = 0, y = 0), size = (width = 320, height = 568))

(lldb) po [UIScreen mainScreen].nativeBounds
(origin = (x = 0, y = 0), size = (width = 640, height = 1136))

(lldb) po [UIScreen mainScreen].currentMode
<UIScreenMode: 0xc57a1b0; size = 640.000000 x 1136.000000>

可以发现

  • IPhone6Plus标准的值的bounds是正确的,nativeBounds与IPhone6Plus放大的值是一样的,同时他们的currentMode的值是他们对应的bounds的值 * 3的结果。
  • IPhone6标准的值的bounds是正确的,nativeBounds与IPhone6放大的值是一样的,同时他们的currentMode的值是他们对应的bounds的值 * 2的结果。
  • IPhone6Plus放大的值的bounds等于IPhone6标准的值,IPhone6放大的值的bounds等于IPhone5的值

结论

在平时开发的过程当中,这些因素可以基本忽略不计,官方文档也是不鼓励去纠结这些,不过也要注意一下,如果你的代码中有通过[UIScreen mainScreen].bounds.size.height 的值去判断当前屏幕尺寸的代码,这是不可取的,用nativeBounds去代替这个值。

UIScreenMode

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值