我正在开发一个iPadOS应用程序,在其中我使用了UISplitViewController
。到目前为止,我一直在使用旧的API并手动处理所有东西(包括displayModeButtonItem
)。现在,我想迁移到更新的“列样式”API (super.init(style: .doubleColumn
)。我有几个UI问题,但我设法用一些解决办法解决了它们,但现在我在一个问题上受阻了,我找不到任何解决方案:
我想利用iOS14 14的UISplitViewController
的所有内置机制,所以我将presentsWithGesture
属性设置为true
。由于这一点,我得到了侧边栏切换图标的景观方向(这正是我想要的),但在肖像我得到一个“回来-雪佛龙图标”与“回来”的标题。是否有一种方式来强制侧边栏切换图标显示这两个方向?
发布于 2021-12-08 11:03:08
我设置了一个示例项目,但我没有得到您的行为。我认为这是因为我们在设置UISplitViewController
时所做的事情有所不同。
首先,感谢(@matt on SO)的两篇文章。(第一部分这里)这给我的代码带来了一些很大的变化。
基本上,我不再将我的UISplitViewController
设置为我的场景中的根视图。相反,我根本不碰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“按钮和没有”后退“按钮与雪佛龙。我正在使用Xcode 13.1,并对iPadOS 14.0和15.1的目标进行了尝试。
如果您需要添加/替换一个bar按钮,我要做的是:
var barBtnSidebarLeft =UIBarButtonItem(图像: UIImage(systemName:"sidebar.left"),样式:.plain,目标: self,action:#selector(leftSidebarTapped)) navigationItem.leftBarButtonItem = barBtnSidebarLeft
但请注意,如果您这样做,您将得到两个侧边栏按钮!关于条形按钮,还有一个注意事项--尽管UISplitViewController
在默认情况下为主和二级提供了导航条,但它并不适用于CompactCompact.com。(坦率地说,我不认为在紧凑尺寸的情况下有一个是好的做法。)
最后,阅读我提供的链接。它真正开始使用UISplitViewControllerDelegate
来帮助您正确传递场景状态值。(我更喜欢称它为场景状态,而不是app状态,因为iPads可以有多个应用程序窗口。)
编辑
最后一个想法。IIRC你可以这样做:
presentsWithGesture
设置为“`false”https://stackoverflow.com/questions/70265083
复制相似问题