willTransitionToTraitCollection 在 UISplitViewController preferredDisplayMode 为 Overlay 时不会在第一次更改时调用
willTransitionToTraitCollection not called on first change when UISplitViewController preferredDisplayMode is Overlay
我正在使用 UISplitViewController 并且在我的详细视图中,我正在尝试使用 willTransitionToTraitCollection:withTransitionCoordinator:
在垂直大小 class 更改为紧凑时更改几个视图的可见性。
仅在 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 的错误报告程序黑洞发送错误报告之前,我想看看是否有人有解释。
"this is a bug"。
我已向 Apple 提交错误报告并为其创建雷达:https://openradar.appspot.com/radar?id=5015544713445376
setPreferredDisplayMode 使所有视图加载,因此您应该最后调用它。
我正在使用 UISplitViewController 并且在我的详细视图中,我正在尝试使用 willTransitionToTraitCollection:withTransitionCoordinator:
在垂直大小 class 更改为紧凑时更改几个视图的可见性。
仅在 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 的错误报告程序黑洞发送错误报告之前,我想看看是否有人有解释。
"this is a bug"。
我已向 Apple 提交错误报告并为其创建雷达:https://openradar.appspot.com/radar?id=5015544713445376
setPreferredDisplayMode 使所有视图加载,因此您应该最后调用它。