将我的项目升级到iOS 6后,我意识到自动布局仅在viewDidAppear中有效,并且我的代码大部分期望视图的框架在viewDidLoad中可用.这个限制使得真正好的汽车布局功能对我来说几乎没用.有没有什么建议来帮助我使用自动布局?
例如,有时开发人员需要根据自动布局选择放置该子视图的位置来调整子视图的信息.在用户已经看到子视图的最终位置之前,开发者无法确定.用户不应该看到这些信息调整,而是一次性显示最终结果.
更具体地说:如果我想根据自动布局放置该视图的位置在视图中更改图像怎么办?我无法查询该位置,然后在用户看不到这种情况下更改图像.
解决方法
作为一般规则,viewDidLoad中不应该依赖视图框架/边界.
一旦视图以编程方式或通过.nib / .xib文件创建,viewDidLoad方法才会被调用.此时,视图尚未设置,只能加载到内存中.
您应该始终在viewWillAppear或viewDidAppear中执行视图布局,因为这些方法在视图准备进行演示之后被调用.
作为测试,如果您只是NSLog(@“frame:%@”,NSStringFromCGRect(self.view.frame));在viewDidLoad和viewWillAppear方法中,您将看到,只有后一种方法才能返回实际的视图大小,这些尺寸与包含在视图中的任何其他元素(如UINavigationBar和UITabBar)相关.