iOS6和iOS7代码的适配(3)——坐标适配
来源:互联网 发布:js根据属性获取对象 编辑:程序博客网 时间:2024/06/10 19:39
转自:http://blog.csdn.net/sakulafly/article/details/17956681
由于iOS7里面status bar和视图是重叠在一起了,所以应用的y坐标就没法和以前一致了,需要重新计算设定。基本上,你的应用用Xcode5运行一下就能看见这个问题,这里写了一个最简单的例子,一个View上加了一个Label控件,分别在iOS6和iOS7的模拟器上的样子。
从图上明显可以看到,iOS7上的应用y坐标起始计算点是从屏幕顶点算起,而iOS6是从status bar来算起,这个原因是导致一切问题的根源。
好了,找到了问题就好办,我列举一下看到过的尝试过的方法:
1. 修改window的frame坐标
这个思路是在iOS7系统里面把windows下拉20个pixel,这样可以让开status bar的位置,于是一切都恢复了正常。
好处是不用每个viewController来逐个修改,一般在AppDelegate.m一个文件里面修改即可。坏处是现实比想象的残酷,看起来简单方便的方法总有各种各样的问题,网上这样做的也各种吐槽,多次努力没结果后我也放弃了继续钻研。
2. 手动修改坐标
这个方法对于不使用XIB文件的学院派极客是唯一的方法,也没有任何问题,就是工作量大。另外,对于使用IB来辅助做UI的应用来说就不太适合了。
3. 修改Delta值
作为苹果公司来说,推出iOS7时显然可以预计到这样的困境,它也确实给大家提供了解决方案。这个方案是苹果在官方文档里面介绍过的方案。
首先是选择需要适配的IB文件,把Interface Builder Document里面的View as选择成iOS 6.1 and Earlier。
这样在IB里面各个控件都会变成iOS6的样式,但此时在iOS7上运行系统仍然会用iOS7的控件来显示,坐标也仍然不正确——貌似一点作用都没有。恩,这只是第一步,不用急,再做一步就可以实现适配了!
修改DeltaY的值,修改成什么值是根据你的实际情况定的,我这里显然就是status bar的高度,20个pixel。
再运行一下应用看看,viewController是不是已经适配好了?
- iOS6和iOS7代码的适配(3)——坐标适配
- iOS6和iOS7代码的适配(3)——坐标适配
- iOS6和iOS7代码的适配(3)——坐标适配
- iOS6和iOS7代码的适配(3)——坐标适配
- iOS6和iOS7代码的适配(3)——坐标适配 (2014-06-25 14:24:38)
- iOS6和iOS7代码的适配(1)
- iOS6和iOS7代码的适配(1)
- iOS6和iOS7代码的适配(1)
- iOS6和iOS7代码的适配(1)
- iOS6和iOS7代码的适配(1)
- iOS6和iOS7代码的适配(2)——status bar
- iOS6和iOS7代码的适配(4)——tableView
- iOS6和iOS7代码的适配(5)——popOver
- iOS6和iOS7代码的适配(2)——status bar
- iOS6和iOS7代码的适配(2)——status bar
- iOS6和iOS7代码的适配(4)——tableView
- iOS6和iOS7代码的适配(6) —— NSLocalizedString
- iOS6和iOS7代码的适配(2)——status bar
- 致CSDN,A
- Sqlserver查询性能分析
- SVN 更新代码后The import ** cannot be resolved
- Spring Security3.1 最新配置实例 .
- 九度 1550 分糖果
- iOS6和iOS7代码的适配(3)——坐标适配
- poi读取excel
- Netty_tips
- hdu 1285 确定比赛名次(拓扑)
- 2.2. About Zones
- ffmpeg 操作命令
- IOS学习之IOS沙盒(sandbox)机制和文件操作
- 多线程编程总结【转】
- Boost 库 容器、数据结构与算法续