iOS 14 UISplitViewController如何在iPad横屏模式下移除“隐藏/显示”按钮?

9

iOS 14 中,新的分割视图控制器会替你处理工具栏按钮。很酷吧!在竖屏模式中,我们看到如下:

enter image description here

我们处于竖屏模式,因此左上角的按钮会呼出“覆盖”版的主列。

而在横屏模式下,我们看到这个:

enter image description here

我们处于横屏模式,因此左上角的按钮会隐藏或显示“并排”版的主列。

现在我想知道如何单独控制这些按钮的存在。我知道可以将 presentsWithGesture 设置为 false 以隐藏全部按钮,但这不是我想要的。我的问题是:如何隐藏 第二个 按钮(横屏)而不隐藏 第一个 按钮(竖屏)?


@dfd,抱歉我无法理解你在暗示什么。 - matt
@dfd 很抱歉,我不知道“导航栏覆盖”是什么意思。 - matt
@dfd 我找不到方法来做那个。我尝试对 self.navigationItem 进行操作,但无法隐藏按钮。 - matt
删除了我们的对话,因为它实际上没有帮助而且是噪音。Apple 决定 UISplitViewController 的默认行为就是它本来的样子——缺少其他评论/答案意味着如此。几年前,我面临着一个问题,即肖像 / 横向方向的意义超出了 Apple 的默认值,首先在 IB(Xcode 8?)中,然后是大小类(当时 iPads 始终是* regular)。我现在看到分屏将其更改为 iPads。也许在一两年内,这种默认行为会让它更加明显。 - user7014451
@dfd 谢谢,没事了,我已经解决了。 - matt
2个回答

8
在分割视图控制器上设置一个代理,并实现这个代理方法:
func splitViewController(_ svc: UISplitViewController, willChangeTo displayMode: UISplitViewController.DisplayMode) {
    svc.presentsWithGesture = displayMode != .oneBesideSecondary
}

6

在SwiftUI中,这个解决方案可行 - 在iOS 16上测试过!

extension UISplitViewController {
    open override func viewDidLoad() {
        preferredDisplayMode = UISplitViewController.DisplayMode.oneBesideSecondary
        
        // remove sidebar button, make sidebar always appear !
       presentsWithGesture = displayMode != .oneBesideSecondary
        
    }
}

谢谢你的回答。我没有想到这种模式!它让我意识到可以通过这种方式扩展UIKit以自定义类设置。在这种情况下,这比依赖像Introspect这样的东西在渲染后进行操作要好得多。 - John Gorenfeld
可以确认这对我也有效,谢谢!值得注意的是,如果NavigationSplitView的底层视图从UISplitViewController更改为其他内容(例如新的仅限于Swift版本),则将来可能会变得脆弱。 - Paolo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接