iOS8中的UIScreen、UIWindow、键盘尺寸、状态栏尺寸的改动
来源:互联网 发布:sql数据库价格 编辑:程序博客网 时间:2024/03/29 07:17
1.首先,在iOS8之前的[UIScreen mainScreen].bounds和 [UIScreen mainScreen].applicationFrame两者的区别在于:
1)[UIScreen mainScreen].bounds:指固定的屏幕尺寸(宽高固定)
2)[UIScreen mainScreen].applicationFrame:指除去状态栏后的固定的屏幕尺寸
比如对于 iPhone4而言,无论屏幕怎么旋转 [UIScreen mainScreen].bounds都是固定的(0,0,320,480); [UIScreen mainScreen].applicationFrame都是固定的(0,20,320,460);
2.但是在iOS8 中[UIScreen mainScreen].bounds 和 [UIScreen mainScreen].applicationFrame两者不再是固定不变的。
当旋转的时候,屏幕也会发生改变。/////这是在iOS8中影响选择适配的一个原因。
iOS 7之前Window的bounds不会随着方向而变化,但是到了iOS 8以后,随着设备方向的旋转,window.bounds.size.width和window.bounds.size.height也会相应发生变化。
同样受影响的还有键盘弹起和消失的通知中[[[notificationuserInfo] objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue]的值,iOS7是以没有旋转的window坐标系为标准计算的,而iOS8是以旋转后的window坐标系为标准计算的。
还有[UIApplicationsharedApplication].statusBarFrame的尺寸也是同样的道理。
详见如下对比:(注意:UIWindow的bounds与[[UIScreen mainScreen] bounds]在各种情况都保持一致)
XCode6 +iOS8SDK+iOS8设备:
iPad横屏情况下
[[UIScreen mainScreen] bounds]:{{0, 0}, {1024, 768}}
[[UIScreen mainScreen] applicationFrame:{{0, 20}, {1024, 748}}
iPad竖屏情况下
[[UIScreen mainScreen] bounds]:{{0, 0}, {768, 1024}}
[[UIScreen mainScreen] applicationFrame:{{0, 20}, {768, 1004}}
XCode5 +iOS7SDK+iOS7设备(或者XCode6+iOS8SDK+iOS7)
iPad横屏情况下
[[UIScreen mainScreen] bounds]:{{0, 0}, {768, 1024}}
[[UIScreen mainScreen] applicationFrame:{{20, 0}, {748, 1024}}
iPad竖屏情况下
[[UIScreen mainScreen] bounds]:{{0, 0}, {768, 1024}}
[[UIScreen mainScreen] applicationFrame:{{0, 20}, {768, 1004}}
XCode6 +iOS8SDK+iOS8设备:
iPhone横屏情况下
[[UIScreen mainScreen] bounds]:{{0, 0}, {568, 320}}
[[UIScreen mainScreen] applicationFrame:{{0, 0}, {568, 320}}
[[notification userInfo][UIKeyboardFrameEndUserInfoKey] CGRectValue] keyboardWillShow: {{0, 127}, {568, 193}}
iPhone竖屏情况下
[[UIScreen mainScreen] bounds]:{{0, 0}, {320, 568}}
[[UIScreen mainScreen] applicationFrame:{{0, 20}, {320, 548}}
[[notification userInfo][UIKeyboardFrameEndUserInfoKey] CGRectValue] keyboardWillShow: {{0, 315}, {320, 253}}
XCode5 +iOS7SDK+iOS7设备(或者XCode6+iOS8SDK+iOS7)
iPhone横屏情况下
[[UIScreen mainScreen] bounds]:{{0, 0}, {320, 568}}
[[UIScreen mainScreen] applicationFrame:{{0, 0}, {300, 568}}
[[notification userInfo][UIKeyboardFrameEndUserInfoKey] CGRectValue] keyboardWillShow: {{158, 0}, {162, 568}}
iPhone竖屏情况下
[[UIScreen mainScreen] bounds]:{{0, 0}, {320, 568}}
[[UIScreen mainScreen] applicationFrame:{{0, 20}, {320, 548}}
[[notification userInfo][UIKeyboardFrameEndUserInfoKey] CGRectValue] keyboardWillShow: {{0, 264}, {320, 216}}
如果你的代码中有依赖UIScreen的bounds属性、UIWindow的bounds属性、键盘通知中UIKeyboardFrameEndUserInfoKey值、[UIApplication sharedApplication].statusBarFrame的地方,那么在用XCode6+iOS8SDK发布新版本前就要高度注意了~
例如:
#define IS_IPHONE_5 (IS_IPHONE && [UIScreen mainScreen].bounds.size.height == 568.f)
#define IS_IPHONE_4 (IS_IPHONE && [UIScreen mainScreen].bounds.size.height == 480.f)
就需要修改成
#define VERTICAL_SCREEN_HEIGHT MAX([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)
#define VERTICAL_SCREEN_WIDTH MIN([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)
#define IS_IPHONE_5 (IS_IPHONE && (VERTICAL_SCREEN_HEIGHT == 568.f))
#define IS_IPHONE_4 (IS_IPHONE && (VERTICAL_SCREEN_HEIGHT == 480.f))
- iOS8中的UIScreen、UIWindow、键盘尺寸、状态栏尺寸的改动
- ios8中的UIScreen
- ios8中的UIScreen
- ios8中的UIScreen
- Android 不同分辨率的logo 尺寸 density 状态栏尺寸
- iOS8各种尺寸
- Android获取状态栏,标题栏,视图的尺寸
- ios [UIScreen mainScreen] bounds] 获取尺寸不对
- UIScreen获取两种类型画面尺寸
- 获取当前屏幕分辨率(尺寸),状态栏尺寸
- ios8截屏尺寸异常
- android 得到屏幕尺寸 状态栏尺寸 标题栏尺寸
- iOS8.0 根据字符串长度计算label的尺寸
- 尺寸
- 尺寸
- UIWindow UIScreen UIViewController UIView之间的关系
- iOS8中的[UIScreen mainScreen].bounds 和 [UIScreen mainScreen].applicationFrame
- 获取屏幕尺寸,包括状态栏
- C++ 60分钟入门教程 - 5、C++引用
- 程序员生存定律:打造属于自己的稀缺性
- 姿转纵仔孜拙缀庄资装坐邹酌椎仔驻资钻
- cf478D Red-Green Towers
- git 指令整理
- iOS8中的UIScreen、UIWindow、键盘尺寸、状态栏尺寸的改动
- 组砖嘴椎最子尊爪阻足宗桩揍综撰赘尊钻
- 公司实习不到两周的总结and感想
- 卓诅转抓踪转诅灼总尊专钻诅嘴浊琢纵钻
- 宗纂坠拙邹作卓注椎祖族卓纵着锥驻着座
- 将一个表中个某一列修改为自动增长的方法
- 拙子足籽赘装作坐做滋桩坠足追踪族族作
- vijos P1774 机器翻译
- 关于MyEclipse 10.7 部署报错,抛空指针异常的解决办法