【发布时间】:2021-10-03 12:55:04
【问题描述】:
在我的 UIKit 应用程序中,我使用 UISplitViewController() 作为我的 rootViewController。我在我的SceneDelegate 中这样配置它:
var splitView: UISplitViewController?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
// This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
self.makeSplitViewController()
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
window.rootViewController = self.splitView
self.window = window
window.makeKeyAndVisible()
self.splitView?.viewController(for: .secondary)?.navigationController?.navigationBar.barStyle = .black
}
}
func makeSplitViewController() {
let splitViewController = UISplitViewController(style: .doubleColumn)
splitViewController.preferredDisplayMode = .oneBesideSecondary
let primaryViewController = UINavigationController(rootViewController: CalendarViewController())
let secondaryViewController = UIHostingController(rootView: EventDetailView())
splitViewController.setViewController(primaryViewController, for: .primary)
splitViewController.setViewController(secondaryViewController, for: .secondary)
splitViewController.setViewController(primaryViewController, for: .compact)
self.splitView = splitViewController
}
如您所见,我使用 CalendarViewController(包裹在 UINavigationController 中)作为我的 primaryViewController,而对于辅助视图,我使用包裹在 UIHostingController 中的 SwiftUI 视图
结果如下:
如您所见,CalendarViewController 适合 iPhone 屏幕,但不适合 iPad 主列。 CalendarViewController 来自 CalendarKit,一个 Swift 日历库。
我需要在 CalendarViewController 中进行哪些更改以适应 SplitView 主列?有什么想法吗?
【问题讨论】:
-
我猜这是由于尺寸等级。在 iPad 上,默认(阅读:全屏)根 VC 始终将是“常规”,而在 iPhone 上,它可能在纵向模式下是“紧凑”。我的第一个想法是检验我的假设——你试过在分屏中使用你的 iPad 吗?这应该清楚事情不是你想要的。接下来,我推荐(归因于@matt)biteinteractive.com/split-view-controllers-done-right-in-ios-14,他向我展示了如何最好让我的拆分VC不成为根。它给你更多的灵活性,期间。
-
@dfd 感谢您的回答。在分屏中,它看起来像这样:i.stack.imgur.com/SwTiF.png 供参考:github.com/richardtop/CalendarKit/issues/…
-
关于尺寸等级,我可能需要更具体一些。
UISplitViewController“服从”它显示的尺寸等级 - 我认为 - iOS 13。请记住,您正在 (a) 使用 iPad,(b) 使用某些版本的 iPadOS [您没有 说],和 (c) 目前你的两个屏幕截图显示“主要/次要”[我认为],我将在“iPad”[iPad mini? iPad pro 12.9 英寸?,还有别的吗?] 很难真正复制。更多,请记住,问题的一部分使用了一个 Apple 应用程序 [Calendar] ......??? -
@dfd 抱歉,我正在使用带有 iPadOS 15 的 11 英寸 iPad Pro。如果我创建了一个 repo,对你有帮助吗?如果我创建它,你能看一下吗?
-
@dfd 我还发现了这个:hacknicity.medium.com/…
标签: swift uikit uisplitviewcontroller calendarkit