【问题标题】:UIViewController viewDidLayoutSubviewsUIViewController viewDidLayoutSubviews
【发布时间】: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 中。

标签: ios viewdidlayoutsubviews


【解决方案1】:

这对我来说似乎完全错了。当这些方法被调用时,让 UIKit 处理。

改为这样做:

- (void)viewDidAppear:(BOOL)animated { [超级 viewDidAppear:动画]; // 总是用 this 调用 super !!! [自我 doSomeCustomLayoutStuff]; // 我实际上并不认为这是必要的。 viewWillLayoutSubviews 用于布置子视图,并在 iOS 5 及更高版本中自动调用。 } - (void)viewWillLayoutSubviews { [超级视图WillLayoutSubviews]; [自我 doSomeCustomLayoutStuff]; } - (void)doSomeCustomLayoutStuff { scrollView.frame = self.view.bounds; scrollView.center = CGRectGetCenter(self.view.bounds); 如果 (imageView.image) { 浮动 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); } }

【讨论】:

    【解决方案2】:

    因为 viewDidLayoutSubviews 中的布局 srollView 会改变你设置的 scrollView。然后,滚动 scrollView 应该会有点卡顿。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 2015-01-16
    相关资源
    最近更新 更多