0

有没有人在使用 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

4

1 回答 1

2

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

您不应该viewDidLayoutSubviews. 您应该将其添加到 中viewDidLoad,并使用约束或自动调整大小以确保布局通道正确设置了子视图的框架。

于 2015-11-01T06:24:17.863 回答