xib文件再次加载导致的orientation问题
来源:互联网 发布:网络割接 编辑:程序博客网 时间:2024/06/05 15:21
最近在做一个iPad的项目, 整个程序暂时只是支持landscape模式。 所以我们把项目设定里面的支持设备方向的地方设置好, 然后把所有viewController里面的shouldAutorotateToInterfaceOrientation 都返回NO. 整个程序工作正常,启动后默认切换到了landscape模式。
可是不知道什么情况,测试突然有一天报了一个转向(orientation)错误的bug, 并且没有提供一个比较一致的重现步骤,只是提到在iPad 1 上有比较高的重现率。(不能重现, 或者没有具体重现步骤的Bug最让人纠结。) 对于这种bug, 首先想到的是把所有与转向相关的设置和代码全部检查一般,结果一无所获。 考虑到iPad1和iPad2的差异, 我们首先想到的可能是内存的影响。 于是把设备连上调试器开始不断跑各种用例希望能够得到重现后的一个log. 几轮测试下来, 终于重现了这个bug. 一看log,又是memory warning惹的祸。 原来iPad的内存相对较小, 当应用稍微使用多一点内存就容易产生memory warning. 之后系统框架会开始把xib释放掉并调用viewDidUnload。 当回来这个页面时,框架会重现加载xib和调用viewDidLoad。而这个出现问题的页面是一个根页面。 也就是UIWindow的setRootViewController设置的。每次回到这个页面时都会用setRootViewController设置它。也许是由于框架本身实现的原因,在设置setRootViewController时如果只是重新加载xib,系统竟然默认为potrait模式。 所以整个页面UI就被转了90度。 然后我们整个应用的自动转向都禁掉了,于是就产生了这个bug.
一个比较简单的解决方案是在重新设置根viewController时把它的transform 和 UIWindow的同步一下。
self.viewControllerNew.view.transform = self.window.rootViewController.view.transform;
self.window.rootViewController = self.viewControllerNew;
至于cocoa框架为什么会产生这个问题, 还是没有找个一个比较好的解释。
- xib文件再次加载导致的orientation问题
- iOS--xib的加载问题
- iOS Xib关联错误导致的问题
- 关于 IOS 开发中遇到的 读取 cell xib 文件时导致死机的问题。
- ios xib文件加载xib
- storyboard和xib的区别以及如何加载xib文件
- 加载xib文件的两种方式
- XIB 导致的错误
- 加载xib文件
- iOS 加载xib文件
- Swift - 加载XIB 文件
- 加载 xib 文件
- 主xib文件加载另一个xib文件
- 加载文件导致PermGen space问题
- Empty Application没有XIB文件的问题
- 关于Android的Orientation问题
- 加载XIB的方法
- xib的加载
- Javascript 弹出覆盖层 Demo
- Whats wrong with your horse 马有什么弊端吗?双语笑
- listview 中设置tooltip 较好的解决方法
- fuse用户态、内核态通信机制分析
- ubuntu 防火墙
- xib文件再次加载导致的orientation问题
- C基本题回顾
- js特殊字符校验
- epoll源码分析
- 报表纸张格式设置
- 温习C/C++笔记(3)——Vector和List的区别
- 寻找家园
- 添加滚动功能 jcarousellite dedecms
- java Enumeration接口的使用