gpt4 book ai didi

ios - UISplitViewController - 用纵向侧边栏切换图标替换后雪佛龙图标

转载 作者:行者123 更新时间:2023-12-05 05:52:09 27 4
gpt4 key购买 nike

我正在开发一个 iPadOS 应用程序,我在其中使用了 UISplitViewController。到目前为止,我一直在使用旧的 API 并手动处理所有内容(包括 displayModeButtonItem)。现在我想迁移到较新的“列样式”API (super.init(style: .doubleColumn)。我遇到了一些 UI 问题,但我设法通过一些解决方法解决了它们,但是现在我无法找到任何解决方案的问题:

我想利用 iOS14 的 UISplitViewController 的所有内置机制,所以我将 presentsWithGesture 属性设置为 true。因此,我在横向方向上获得了侧边栏切换图标(这正是我想要的),但在纵向方向上,我得到了一个带有“后退”标题的“后雪佛龙图标”。有没有办法强制在两个方向上显示侧边栏切换图标?

Portrait orientation - I'd like to have sidebar toggle icon here

Landscape orientation - this is how I'd like the button to look like in both orientations

最佳答案

我设置了一个示例项目,但没有得到您的行为。我认为这是因为我们在设置 UISplitViewController 时采用了不同的方式。

首先,非常感谢 Matt Neuburg(@matt 在 SO 上)的两部分文章。 ( part one here ) 这为我的代码提供了一些重大更改。

基本上,我不再将我的 UISplitViewController 设置为场景中的 Root View 。相反,我根本不触摸 SceneDelegate,而是使用默认的 ViewController:

let primaryVC = PrimaryVC()
let secondaryVC = SecondaryVC()
let compactVC = CompactVC()

override func viewDidLoad() {
super.viewDidLoad()
let split = UISplitViewController(style: .doubleColumn)
self.addChild(split)
self.view.addSubview(split.view)
split.view.frame = self.view.bounds
split.presentsWithGesture = true
split.preferredSplitBehavior = .tile
split.view.autoresizingMask = [.flexibleHeight, .flexibleWidth]
split.didMove(toParent: self)
split.setViewController(primaryVC, for: .primary)
split.setViewController(secondaryVC, for: .secondary)
split.setViewController(compactVC, for: .compact)
}

当我执行此操作时,我得到一个“sidebar.left”按钮,但没有带有 Chevron 的“后退”按钮。我使用的是 Xcode 13.1,并针对 iPadOS 14.0 和 15.1 的目标进行了尝试。

如果你需要添加/替换一个条形按钮,我做的是:

var barBtnSidebarLeft = UIBarButtonItem(图像:UIImage(系统名称:“sidebar.left”),样式:.plain,目标:self, Action :#selector(leftSidebarTapped))navigationItem.leftBarButtonItem = barBtnSidebarLeft

但请注意,如果您这样做,您将获得两个 侧边栏按钮!关于栏按钮,还有一点要注意 - 虽然 UISplitViewController 默认为 Primary 和 Secondary 提供导航栏,但它为 Compact . (坦率地说,我不认为在紧凑的尺寸下拥有一个是个好习惯。)

最后,通读我提供的链接。它真正涉及到使用 UISplitViewControllerDelegate 来帮助您正确传递场景状态值。 (我更喜欢称它为场景状态而不是应用状态,因为 iPad 可以有多个应用窗口。)

编辑

最后一个想法。 IIRC 你可以这样做:

  • presentsWithGesture设置为`false
  • 在两个 View Controller 中随意放置您自己的条形按钮
  • 手动(通过委托(delegate)函数?)打开和关闭主视图 Controller

关于ios - UISplitViewController - 用纵向侧边栏切换图标替换后雪佛龙图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70265083/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com