【发布时间】:2017-01-31 04:02:39
【问题描述】:
我正在使用 UISplitViewController,在我的详细视图中,我尝试使用 willTransitionToTraitCollection:withTransitionCoordinator: 在垂直大小类更改为 Compact 时更改几个视图的可见性。
仅在 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 中,添加viewWillTransitionToTraitCollection 和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:总是被调用,但willTransitionToTraitCollection:在第一次转换时没有被调用。
有人知道这是为什么吗?我觉得这是一个错误,但在我将错误报告发送到 Apple 的错误报告者黑洞之前,我想看看是否有人有解释。
【问题讨论】:
标签: ios objective-c uisplitviewcontroller