来自viewDidLayoutSubviews的PFLoginViewController无限循环?

时间:2015-10-31 20:52:52

标签: objective-c parse-platform parseui viewdidlayoutsubviews

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

在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

1 个答案:

答案 0 :(得分:2)

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

您应该viewDidLayoutSubviews中添加子视图。您应该在viewDidLoad中添加它,并使用约束或自动调整来确保布局传递正确设置子视图的帧。