经过几个小时的研究,您可以尝试删除
我正在将我的应用程序过渡到iOS 13,UISplitViewController会折叠到详细视图上,而不是在启动时折叠到主视图上-仅在iPad上。另外,后退按钮也没有显示-好像它是根视图控制器。
我的应用程序由UISplitViewController
组成,该子类已被子类化,与UISplitViewControllerDelegate
一致。拆分视图包含两个子视图-均为UINavigationControllers
,并嵌入在UITabBarController
(子类TabViewController
)
在分割视图viewDidLoad
中,将委托设置为self
,将preferredDisplayMode
设置为.allVisible
。
由于某种原因,未调用方法splitViewController(_:collapseSecondary:onto:)
。
在iPhone和iPad上的iOS 12]中,在启动时正确地在 在iPhone上的iOS 13splitViewController(_:collapseSecondary:onto:)
和application(didFinishLaunchingWithOptions)
之间调用方法applicationDidBecomeActive
。>>splitViewController(_:collapseSecondary:onto:)
和scene(willConnectTo session:)
之间调用了sceneWillEnterForeground
方法。
但是在iPad]上的iOS 13中,如果窗口在启动时具有紧凑的宽度,例如在创建为拆分视图的新场景中,根本不会调用splitViewController(_:collapseSecondary:onto:)
方法。仅在将窗口扩大到常规宽度然后再缩小时才调用此方法。
class SplitViewController: UISplitViewController, UISplitViewControllerDelegate { override func viewDidLoad() { super.viewDidLoad() self.delegate = self preferredDisplayMode = .allVisible } func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController:UIViewController, onto primaryViewController:UIViewController) -> Bool { print("Split view controller function") guard let secondaryAsNavController = secondaryViewController as? UINavigationController else { return false } guard let topAsDetailController = secondaryAsNavController.topViewController as? DetailViewController else { return false } if topAsDetailController.passedEntry == nil { return true } return false } }
class SceneDelegate: UIResponder, UIWindowSceneDelegate { func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { // Setup split controller let tabViewController = self.window!.rootViewController as! TabViewController let splitViewController = tabViewController.viewControllers![0] as! SplitViewController let navigationController = splitViewController.viewControllers[splitViewController.viewControllers.count-1] as! UINavigationController navigationController.topViewController!.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem navigationController.topViewController!.navigationItem.leftBarButtonItem?.tintColor = UIColor(named: "Theme Colour") splitViewController.preferredDisplayMode = .allVisible }
class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { if #available(iOS 13.0, *) { } else { let tabViewController = self.window!.rootViewController as! TabViewController let splitViewController = tabViewController.viewControllers![0] as! SplitViewController let navigationController = splitViewController.viewControllers[splitViewController.viewControllers.count-1] as! UINavigationController navigationController.topViewController!.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem navigationController.topViewController!.navigationItem.leftBarButtonItem?.tintColor = UIColor(named: "Theme Colour") splitViewController.preferredDisplayMode = .allVisible } return true }
这让我感到困惑,为什么在iPhone中调用此方法,而在iPad中却没有!我是一名新开发人员,这是我的第一篇文章,因此,如果我的代码没有提供足够的细节或格式不正确,我们深感抱歉!
我正在将我的应用程序过渡到iOS 13,UISplitViewController会折叠到详细视图上,而不是在启动时折叠到主视图上-仅在iPad上。此外,后退按钮也没有显示-好像是...
经过几个小时的研究,您可以尝试删除
splitViewController.preferredDisplayMode = .allVisible
在SceneDelegate类中。
它经过测试并成功显示在iOS 13 iPad Pro(12.9英寸)模拟器中。
经过几个小时的研究,您可以尝试删除