我有一个使用UISplitViewController的应用程序,当我在纵向模式下启动应用程序时,"Group" UIBarButtonItem 丢失了。需要旋转屏幕到横向模式再切换回纵向模式才能看到它。而如果在横向模式下启动应用程序,它就会出现。以下是一些截图以更清楚地说明:
这是应用程序在纵向模式下启动时的情况:
这是在从纵向模式旋转后的横向模式下:
这是从横向模式旋转回纵向模式后的情况:
这是应用程序在纵向模式下启动时的情况:
![enter image description here](https://istack.dev59.com/ikmOv.webp)
![enter image description here](https://istack.dev59.com/BFMB5.webp)
![enter image description here](https://istack.dev59.com/Yzj7f.webp)
viewDidLoad
中设置委托,它将在分割视图加载(带有根表视图控制器)之后才设置。这就是为什么直到你切换到横屏并返回后才会出现。最好的方法是在应用程序委托实现文件中创建UISplitViewController时设置委托,或者在根表视图控制器中使用类似以下的内容设置:- (void)viewDidLoad {
self.splitViewController.delegate = [self.splitViewController.viewControllers objectAtIndex:1];
}
这使得详细视图委托,所以当它在tableView控制器加载后加载时,它将调用您的splitViewController:willHideViewController:...
方法。
当然,这可能不是您的情况。我只是假设,因为我有完全相同的行为,它可能是相同的原因。如果这不能解决问题,只需说一声,我们会找到原因。
我也无法解决这个问题,因为我的代码和IB连接看起来与苹果的多个详细视图示例源代码相同。
通过将倒数第二行中的引用从左侧视图控制器类的属性self.splitViewController更改为自动传递给该方法的svc,我成功地使其正常工作。我在调试器中注意到前者由于某种原因尚未实例化。(内存位置为0x00000000)。
- (void)splitViewController:(UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController:(UIPopoverController*)pc {
// Keep references to the popover controller and the popover button, and tell the detail view controller to show the button.
barButtonItem.title = @"Menu";
self.popoverController = pc;
self.rootPopoverButtonItem = barButtonItem;
UIViewController <SubstitutableDetailViewController> *detailViewController = [self.splitViewController.viewControllers objectAtIndex:1];
[detailViewController showRootPopoverButtonItem:rootPopoverButtonItem];
}