iPhone5 高度的自适应问题

作者:舍得333 主页: http://blog.sina.com.cn/u/1509658847

iPhone5的屏幕拉长,那么做app就要考虑到View的自适应问题了,ios6的布局自适应很强大,但是我们现在做的程序一般都要兼容4.3,所以ios6的方法用不上,这里至少ios4.3以上能用的方法
UIView及其子类的自适应的设置有两种方法:
1.在xib里面,可以参考我的文章: http://blo g.sina.com.cn/s/blog_59fb90df01016ixo.html
2.就是在代码里面写了,就是设置UIView的autoresizingMask属性,具体方法,也参考上面的连接
其实这两种方法的本质是一样的,只是一个使用Xib界面设置,一个用代码而已

你理解了上面的 自适应设置之后,下面就来进一步的讨论了:
前提:你的UIViewController的Xib里面的View是 3.5寸的即(320*480)的。
在你设置自适应自动伸长以后,我们经常会在ViewDidLoad方法里面初始化一些界面,这时候你使用主self.view.frame时,你会发现frame和xib里面的尺寸是一样的,并没有自适应伸长。
其实你的代码是没错的,不管你是在xib里面 设置自适应,还是在ViewDidLoad方法里卖弄设置,你得到的self.view.frame始终是和xib里面的尺寸是一样的,这时你就郁闷了,因为我很多subView的尺寸要根据self.view的尺寸来设置。
所以你对subView的大小设置,不能在Viewdidload里面,而是在viewWillAppear和viewDidAppear里面,
在这两个方法里面self.view.frame是自适应之后的值

上面是在使用的xib文件测试的
现在发现,使用storyBoard时,情况就不同了,在ViewDidLoad里面已经可以获取到真实的屏幕尺寸。

现在假设咱设置的viewController 默 认是带有NaviBa r的
从xib文件加载
那么viewDidLoad测试sel.view.frame 为在xib里面一样的高度。
而在viewWillAppear里测试,就是自动适应屏幕之后的高度。(就是执行view.autoresizeingmask之后)

而从storyBaord加载
那么viewDidLoad测试sel.view.frame 为在xib里面一样的高度+naviBar的高度。(这里很奇怪)
而在viewWillAppear里测试,就是自动适应屏幕之后的高度。(就是执行view.autoresizeingmask之后)

你可能感兴趣的:(ios,屏幕兼容)