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

仅在iPhone上(不是iPhone Plus或iPad),如果将preferredDisplayMode更改为UISplitViewControllerDisplayModePrimaryOverlay,则第一次旋转设备时不会调用willTransitionToTraitCollection:withTransitionCoordinator:,而会自动调用willTransitionToSize:withTransitionCoordinator:。如果我将preferredDisplayMode设置为其他任何值,它都可以正常工作。如果您在选择“主控”列表中的项目之前旋转设备,则它可以正常工作。仅在从肖像到风景的第一次旋转中。

使用Master-Detail模板可以很容易地复制它:

AppDelegate:

- (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;
}


DetailViewController中,添加viewWillTransitionToTraitCollectionviewWillTransitionToSize实现并设置断点:

- (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:,但在第一次转换时未调用willTransitionToTraitCollection:

有人知道为什么是这样吗?我觉得这是一个错误,但我想在将错误报告发送到Apple的错误报告程序黑洞之前,先看看是否有人对它有所解释。

最佳答案

附带“这是一个错误”。

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

关于ios - UISplitViewController preferredDisplayMode为Overlay时,第一次更改时不会调用willTransitionToTraitCollection,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39582112/

10-13 07:42