在IB中创建的UIView在viewDidLoad和awakeFromNib中没有框架

时间:2012-12-19 00:11:42

标签: ios uiview

如果我在这里错过了一些内容,我很抱歉,但我认为在IB中创建的UIView对象应该在viewDidLoad中创建它们的帧,这样您就可以在viewDidLoad或awakeFromNib或viewWillAppear中基于此视图进行初始设置。我在每种方法中记录了输出:

NSLog(@"%@ %s", NSStringFromCGRect(self.zoomView.frame), __FUNCTION__);

总而言之,我得到{0,0,0,0}。

这是我的UIStoryboard中的第一个nib,我正在使用Autolayout和iOS 6.我可以在以前的应用程序上发誓我使用了在IB中创建的其他UIView对象的框架进行设置。有什么东西改变了吗?或者我只是错误地记得它?谢谢!

2 个答案:

答案 0 :(得分:4)

我有完全相同的问题。是的,你没记错 - 在iOS 5中它曾经是不同的。我总是在viewDidLoad:中设置我的视图,框架已经是实际在屏幕上显示的方式了。

现在在iOS 6中,如果启用了auto layout,您需要将代码放入viewDidAppear:以使用有效的框架。显然,布局是在这两个电话之间进行的。

答案 1 :(得分:0)

我认为它与你正在使用的设备有关,可能还有其他的东西,但框架和边界“有时”可能会被viewDidLoad调用时设置,有时不会(取决于......)另一方面保证在调用“ViewDidAppear”时设置手,帧和边界。并且您希望将与代码相关的代码放在保证的位置!