当UISplitViewController preferredDisplayMode为Overlay

时间:2016-09-19 21:07:09

标签: ios objective-c uisplitviewcontroller

我正在使用UISplitViewController,在我的详细视图中,当垂直大小类更改为Compact时,我尝试使用willTransitionToTraitCollection:withTransitionCoordinator:来更改几个视图的可见性。

仅在iPhone上(不是iPhone Plus或iPad)如果我将preferredDisplayMode更改为UISplitViewControllerDisplayModePrimaryOverlay,则第一次旋转设备时不会调用willTransitionToTraitCollection:withTransitionCoordinator:,{{1是的。如果我将willTransitionToSize:withTransitionCoordinator:设置为其他任何内容,那就可以了。如果在选择主列表中的项目之前旋转设备,它可以正常工作。它只能在从纵向到横向的第一次旋转中。

使用Master-Detail模板可以轻松复制:

的AppDelegate:

preferredDisplayMode

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController; // ******** Add this ******** [splitViewController setPreferredDisplayMode:UISplitViewControllerDisplayModePrimaryOverlay]; UINavigationController *navigationController = [splitViewController.viewControllers lastObject]; navigationController.topViewController.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem; splitViewController.delegate = self; return YES; } 中,添加DetailViewControllerviewWillTransitionToTraitCollection实施并设置断点:

viewWillTransitionToSize

您会看到始终调用- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { [super willTransitionToTraitCollection:newCollection withTransitionCoordinator:coordinator]; } - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; } ,但第一次转换不会调用willTransitionToSize:

有谁知道这是为什么?我觉得这是一个错误,但我想看看是否有人在向Apple的bug报告黑洞发送错误报告之前有解释。

2 个答案:

答案 0 :(得分:0)

选择“这是一个错误”。

我已向Apple提交了一份错误报告,并为其创建了一个雷达:https://openradar.appspot.com/radar?id=5015544713445376

答案 1 :(得分:-1)

setPreferredDisplayMode会加载所有视图,因此您应该最后调用它。