5

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

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

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

这是我的 UIStoryboard 中的第一个 nib,我正在使用 Autolayout 和 iOS 6。我可以在以前的应用程序上发誓,我已经使用在 IB 中创建的其他 UIView 对象的框架来进行设置。有什么改变了吗?还是我记错了?谢谢!

4

2 回答 2

4

我有完全相同的问题。是的,你没记错——它在 iOS 5 中曾经有所不同。我总是在其中设置视图,viewDidLoad:并且框架已经是视图实际在屏幕上时的样子。

现在在 iOS 6 中,如果启用了自动布局,您需要将代码放入viewDidAppear:其中以使用有效的框架。显然,布局是在这两个调用之间完成的。

于 2013-02-24T23:54:02.207 回答
0

我认为这与您正在使用的设备以及可能的其他事情有关,但框架和边界“可以”有时在调用 viewDidLoad 时设置,有时不设置(取决于....)另一方面,框架并保证在调用“ViewDidAppear”时已经设置了边界。并且您希望将与框架和边界相关的代码放在有保证的地方!

于 2013-02-25T00:06:47.477 回答