setFrame 的方法一定要放在 viewDidAppear 里,在 viewDidLoad 里是没有效果的。因为 viewDidLoad 的时候, view 还没有加载完成。
使用 AutoLayout+SizeClasses 的模式开发,在viewDidLoad 中视图的最终frame是没有确定的,你可以试试在ViewDidLoad分别调用 [self layoutIfNeeded] 和 [ScrollView layoutIfNeeded] 然后看看frame,如果是只是适配iPhone 竖屏,我建议你不要用 SizeClasses 具体看 博客
调用方法viewDidLoad中,所有的控件的frame都是在当前storyboard中状态,然后viewdidlayoutsubview,应该是这个方法。这个会根据你在界面上所设定的约束开始调整各个view,如果没有约束,那应该还有automask什么的,会根据不同的设备尺寸自动调整frame。然后再是viewwillappeare方法。你可以自己去重写下viewdidlayoutsubview,然后在里面看看self.view.frame会有什么变化。
这个问题很早就有了,不是iOS8的问题。
view的几何属性,在viewDidLayoutsubview中取比较合适。
要改变controller的view的frame,可以在viewwilllayoutsubviews里面修改。在viewdidload,viewwillappear,viewdidappear修改都不会改变constroller view的大小。
https://segmentfault.com/q/1010000003072324
http://blog.csdn.net/u013820207/article/details/33293127