valentin,直接回答“为什么会这样?”,我认为答案很简单,这是他们的 API 实现中的一个错误。
您似乎已经发现,当处于横向时,它会在看起来不应该调用上述内容时调用,然后调用 splitViewController:willShowViewController:invalidatingBarButtonItem: 。
另外,我发现在纵向时,它会向splitViewController:willHideViewController:withBarButtonItem:forPopoverController: 发送一条非常早的消息(即在调整 view.frame 之前)。
我看到最让我烦恼的一件事是,使用他们创建模板时提供的代码,按钮栏会在启动时出现然后消失。
我的解决方案是实施一种变通方法,我已在 git@github.com:johnkdoe/freeforall.git 的 KludgeWorkaroundForBuggySplitViewDelegateStartup 类中发布。
使它成为您当前详细视图控制器类的超类,如
//@interface MyViewController : UIViewController<UISplitViewControllerDelegate>
@interface MyViewController : KludgeWorkaroundForBuggySplitViewDelegateStartup
如果您没有喜欢的东西,这会将初始按钮栏标题设置为 Master。您可以通过覆盖子类实现中的 @property getter 来覆盖它。如果您想做的不仅仅是这个 kludgeWorkaround 类中的内容,您可以自己覆盖这些内容并(复制和粘贴或)在自己工作之前对它们调用 [super ...]。
我不能说这解决了在我看来是一个实现错误的问题,但解决方法消除了在横向模式下启动拆分视图控制器应用程序时按钮栏的短暂外观。