来自viewDidLayoutSubviews的PFLoginViewController无限循环



是否有人在iOS 9中使用PFLoginViewController(来自ParseUI框架)遇到问题?

在iOS 8中,根据Parse文档,我在viewDidLayoutSubviews中为LoginViewController设置了自定义字段,然而,在iOS 9中,它进入了一个无限循环,不会退出viewDidLayoutSubviews方法。

(void)viewDidLayoutSubviews {
    NSLog(@"didLayoutSubviews");
    [super viewDidLayoutSubviews];
    float width = self.view.frame.size.width;
    float height = self.view.frame.size.height;
    ......
    [self.logInView addSubview:backgroundImage]; // <- the line here causes an infinite loop
}

更新:我已经将其缩小到罪魁祸首:addSubview是导致无限循环的行。但再说一遍,它只会在iOS9中引起它……贯穿始终?

更新2:对于所有ParseUI用户,答案(感谢下面受访者的想法)是,尽管它在iOS 8中使用该Parse工作,但您不能再在viewDidLayoutSubviews中向PFLoginViewController添加背景图像,如前所述同样在viewDidLoad中向PFLoginViewController.loginView添加背景也不起作用。

解决方案:将添加任何子视图移动到viewDidLoad方法,而不将子视图添加到PFLoginViewController.loginView;而是将子视图直接添加到PFLoginViewController.view

每当视图的子视图数组发生更改时,它都会将自己标记为需要布局。由于您在布局完成后立即添加子视图,因此会触发另一个布局过程。为什么要在每个布局过程中添加子视图?

您应该而不是viewDidLayoutSubviews中添加子视图。您应该将其添加到viewDidLoad中,并使用约束或自动resizing来确保布局过程正确设置子视图的框架。

最新更新