【发布时间】:2012-02-20 22:04:36
【问题描述】:
我很难弄清楚为什么 Erica Sadun 在她的食谱示例 Ch07-11 中执行以下操作(在 viewDidLayoutSubviews 中调用 viewDidAppear)。也许这两个方法应该调用另一个方法?
见:https://github.com/erica/iOS-5-Cookbook/tree/master/C07
- (void) viewDidAppear:(BOOL)animated
{
scrollView.frame = self.view.bounds;
scrollView.center = CGRectGetCenter(self.view.bounds);
if (imageView.image)
{
float scalex = scrollView.frame.size.width / imageView.image.size.width;
float scaley = scrollView.frame.size.height / imageView.image.size.height;
scrollView.zoomScale = MIN(scalex, scaley);
scrollView.minimumZoomScale = MIN(scalex, scaley);
}
}
- (void) viewDidLayoutSubviews
{
[self viewDidAppear:NO];
}
知道为什么吗?
【问题讨论】:
-
我猜这只是糟糕的代码分解。她正在使用 UIViewControllers 系统调用 viewDidAppear 进行初始布局,然后在视图完成子视图布局后直接懒惰地重新使用相同的方法。我认为您的假设是正确的,即 viewDidAppear 应该调用像“adjustView”这样的方法,而 viewDidLayoutSubviews 应该做同样的事情。
-
我发现我可以将所有布局的东西放在 viewDidLayoutSubviews 中,而不需要放在 viewDidAppear、viewWillAppear 甚至 didRotateFromInterfaceOrientation 中。