问题描述:
自己刚做好的App,一同事拿来把玩,点击进入一个界面布局全乱,自己拿过来重新点击没问题啊,后来回忆起来这哥们完全不按套路,好像是斜着45°拿着手机点击出了问题,自己一试果然如此,赶紧找问题解决呗。
想想大家都明白是横竖屏旋转的问题,可是之前已经解决了这个问题啊,由于该项目有视频播放所以不能只限制为竖屏,只有播放视频时可以旋转其它情况不能旋转(这个也查了不少资料,会单独来一篇),这里只讨论非竖屏点击进入界面渲染布局错误。
解决方案:
[UIScreen mainScreen].bounds.size.width和[UIScreen mainScreen].bounds.size.height,很熟悉吧,就是它们搞的鬼。iOS8以前屏幕的宽、高是不随屏幕旋转变化的,比如iPhone6竖屏[UIScreen mainScreen].bounds.size.width = 375,横屏也是375;iOS8以后iPhone6竖屏[UIScreen mainScreen].bounds.size.width = 375,横屏就变为[UIScreen mainScreen].bounds.size.width = 667,是会随着屏幕旋转而变化。
查了一下解决方案不少,自己认为以下比较好理解也方便,在定义宏的时候为
#define SCREEN_WIDTH MIN([UIScreen mainScreen].bounds.size.width,[UIScreen mainScreen].bounds.size.height)
#define SCREEN_HEIGHT MAX([UIScreen mainScreen].bounds.size.width,[UIScreen mainScreen].bounds.size.height)
不管横屏还是竖屏 我们认为的“宽”就是最小的那个,“高”就是最大的那个,这样是不是很好处理也好理解。这样一来,横竖屏下点击进入的界面渲染布局就不会出问题。