我有一个与Xcode 5(iOS 6和iOS 7)完美运行的Universal iOS项目。我为iPad和iPhone使用了不同的 Storyboard。

当我在Xcode 6 GM上运行它时,它可以在iPhone上完美运行,但不能在iPad上运行。我调试后发现UISplitViewController中的viewDidLayoutSubviews存在问题。例如:
- (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; NSLog(@"run"); // some config with frame of child controllers}
它连续运行并且没有停止。

有人有同样的问题吗?请帮忙 :(

谢谢!

最佳答案

您在子 Controller 的viewDidLayoutSubviews覆盖中拥有的代码本身就是在修改 View 的 subview ,触发viewDidLayoutSubviews一次又一次地调用。

为避免这种情况,请尝试将BOOL属性添加到UISplitViewController中,以控制子 Controller 布局代码的执行。

@interface UISplitViewController()
...
@property (nonatomic) BOOL subViewLayoutCalled;
...
@end

然后在您的viewDidLayoutSubviews ...
- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    NSLog(@"run");
    if (!self.subViewLayoutCalled) {
        self.subViewLayoutCalled = YES;
        // some config with frame of child controllers
    }
}

值得一去。

我最近有同样的问题。

关于ios - iOS 8的viewDidLayoutSubviews无限循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25881709/

10-10 14:21