UISplitViewControllerDisplayModePrimaryOverlay导致“不平衡调用开始/结束外观转换”

时间:2015-01-14 19:28:09

标签: ios8 uisplitviewcontroller

在iOS 8中,将UISplitViewController上的preferredDisplayMode设置为PrimaryOverlay会产生以下警告:

" UINavigationController的开始/结束外观转换的非平衡调用"

如果我将preferredDisplayMode设置为AllVisible或根本不设置它,则没有问题。我尝试过的模拟器中的所有iPad和iPhone都出现问题。无论应用程序是纵向还是横向启动,都会出现问题。

这是一些非常简单的代码:



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    UITableViewController *tableViewController = [[UITableViewController alloc] init];
    UIViewController *viewController = [[UIViewController alloc] init];

    UINavigationController *masterNavController = [[UINavigationController alloc] initWithRootViewController:tableViewController];
    UINavigationController *detailNavController = [[UINavigationController alloc] initWithRootViewController:viewController];

    UISplitViewController *svc = [[UISplitViewController alloc] init];
    [svc addChildViewController:masterNavController];
    [svc addChildViewController:detailNavController];

    //svc.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible;
    svc.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryOverlay;

    self.window.rootViewController = svc;
    [self.window makeKeyAndVisible];

    return YES;
}




1 个答案:

答案 0 :(得分:11)

将显示代码包裹在dispatch_async中。否则iOS似乎与同时运行的其他动画混淆。

dispatch_async(dispatch_get_main_queue(), ^{
    svc.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryOverlay;
});

dispatch_async(dispatch_get_main_queue()) {
    svc.preferredDisplayMode = .PrimaryOverlay
}