Apple не поддерживает UISplitViewController.DisplayMode.PrimaryOnly как SplitViewController.preferredDisplayMode. ⇐ IOS
Apple не поддерживает UISplitViewController.DisplayMode.PrimaryOnly как SplitViewController.preferredDisplayMode.
Как включить masterViewController как UISplitViewController.preferredDisplayMode (UISplitViewController.DisplayMode.PrimaryOnly) на устройствах iPhone более высокого класса (например, iPhone 14 Plus) в ландшафтном режиме?
Я использую SplitView со стилем .doubleColumn. Моя цель состоит в том, чтобы SplitView представлял MasterView в качестве начального экрана, а подробное представление в качестве последующего экрана в альбомном режиме, напоминающем портретный режим iPhone по умолчанию, особенно на устройствах iPhone более высокого класса (таких как iPhone 14 Plus и iPhone Pro Max). ). При запуске на iPad он должен отображаться как «рядом» («oneBesideSecondary»).
Как мы можем отобразить MasterViewController с помощью SplitViewController.preferredDisplayMode, в частности установив для него значение UISplitViewController.DisplayMode.PrimaryOnly при повороте в альбомный режим на устройствах iPhone более высокого класса? Однако важно отметить, что Apple не поддерживает UISplitViewController.DisplayMode.PrimaryOnly.
Желаемый интерфейс: Портрет на iPhone:
Основной виртуальный виртуальный язык:
https://i.stack.imgur.com/cqWbH.png
вторичный виртуальный виртуальный компьютер:
https://i.stack.imgur.com/8x7Ps.jpg
Альбомное расположение iPhone:
основной виртуальный виртуальный язык:
https://i.stack.imgur.com/3dCwP.png
вторичныйVC:
https://i.stack.imgur.com/bBe4O.png
iPad:
портрет:
https://i.stack.imgur.com/PfXTW.jpg
Пейзаж:
https://i.stack.imgur.com/teqV0.jpg
Вот мой код:
``` класс ViewController: UIViewController, UISplitViewControllerDelegate {
var SplitVC = UISplitViewController(стиль: .doubleColumn) вар делегатПротокол: TableSelectionDelegate? вар ListView: ListViewController! переопределить функцию viewDidLoad() { супер.viewDidLoad() SplitVC.delegate = сам SplitVC.presentsWithGesture = правда SplitVC.preferredSplitBehavior = .tile ListView = ListViewController() } переопределить func viewWillAppear(_animated: Bool) { var PrimaryVC: ListViewController = UIStoryboard (имя: «Main», Bundle: nil).instantiateViewController (withIdentifier: «ListViewController») как! Листвиевконтроллер var SecondVC: SecondViewController = UIStoryboard (имя: «Main», пакет: ноль).instantiateViewController (withIdentifier: «SecondViewController») как! Секондвиевконтроллер PrimaryVC.delegate = сам SecondVC.view.backgroundColor = UIColor.placeholderText если UIDevice.current.userInterfaceIdiom == .pad { SplitVC.setViewController(primaryVC, для: .primary) SplitVC.setViewController(второйVC, для: .вторичный) SplitVC.preferredDisplayMode = UISplitViewController.DisplayMode.oneBesideSecondary } еще { SplitVC.setViewController(второйVC, для: .primary) SplitVC.setViewController(primaryVC, для: .вторичный) SplitVC.preferredDisplayMode = UISplitViewController.DisplayMode. SecondaryOnly // скрываем кнопку возврата в основной список пусть контроллеры = SplitVC.viewControllers PrimaryVC = (контроллеры [контроллеры.count-1] как! UINavigationController).topViewController как! Листвиевконтроллер PrimaryVC.navigationItem.leftBarButtonItem = SplitVC.displayModeButtonItem PrimaryVC.navigationItem.leftItemsSupplementBackButton = false } addChild (splitVC) SplitVC.view.frame = CGRect (x: 0, y: 0, ширина: UIScreen.main.bounds.size.width, высота: UIScreen.main.bounds.size.height) self.view.addSubview(splitVC.view) SplitVC.didMove(toParent: self) } func SplitViewController (_ svc: UISplitViewController, willChangeTo displayMode: UISplitViewController.DisplayMode) { если UIDevice.current.userInterfaceIdiom == .phone { svc.presentsWithGesture = displayMode != . SecondaryOnly } }
расширение ViewController: TableSelectionDelegate { func selectedRow(row: Int, viewController: UIViewController) {
SplitVC.showDetailViewController(viewController, отправитель: self) }
Я попробовал использовать приведенный выше код, заменив PrimaryVC на .вторичный и SecondaryVC на .primary в SplitView для типа устройства iPhone. В результате я добился желаемого пользовательского интерфейса. SplitVC.setViewController(второйVC, для: .primary) SplitVC.setViewController(primaryVC, для: .вторичный) SplitVC.preferredDisplayMode = UISplitViewController.DisplayMode. SecondaryOnly. Однако я не уверен, был ли этот подход правильным или неправильным. Каким будет лучший подход для достижения желаемого пользовательского интерфейса?
Как включить masterViewController как UISplitViewController.preferredDisplayMode (UISplitViewController.DisplayMode.PrimaryOnly) на устройствах iPhone более высокого класса (например, iPhone 14 Plus) в ландшафтном режиме?
Я использую SplitView со стилем .doubleColumn. Моя цель состоит в том, чтобы SplitView представлял MasterView в качестве начального экрана, а подробное представление в качестве последующего экрана в альбомном режиме, напоминающем портретный режим iPhone по умолчанию, особенно на устройствах iPhone более высокого класса (таких как iPhone 14 Plus и iPhone Pro Max). ). При запуске на iPad он должен отображаться как «рядом» («oneBesideSecondary»).
Как мы можем отобразить MasterViewController с помощью SplitViewController.preferredDisplayMode, в частности установив для него значение UISplitViewController.DisplayMode.PrimaryOnly при повороте в альбомный режим на устройствах iPhone более высокого класса? Однако важно отметить, что Apple не поддерживает UISplitViewController.DisplayMode.PrimaryOnly.
Желаемый интерфейс: Портрет на iPhone:
Основной виртуальный виртуальный язык:
https://i.stack.imgur.com/cqWbH.png
вторичный виртуальный виртуальный компьютер:
https://i.stack.imgur.com/8x7Ps.jpg
Альбомное расположение iPhone:
основной виртуальный виртуальный язык:
https://i.stack.imgur.com/3dCwP.png
вторичныйVC:
https://i.stack.imgur.com/bBe4O.png
iPad:
портрет:
https://i.stack.imgur.com/PfXTW.jpg
Пейзаж:
https://i.stack.imgur.com/teqV0.jpg
Вот мой код:
``` класс ViewController: UIViewController, UISplitViewControllerDelegate {
var SplitVC = UISplitViewController(стиль: .doubleColumn) вар делегатПротокол: TableSelectionDelegate? вар ListView: ListViewController! переопределить функцию viewDidLoad() { супер.viewDidLoad() SplitVC.delegate = сам SplitVC.presentsWithGesture = правда SplitVC.preferredSplitBehavior = .tile ListView = ListViewController() } переопределить func viewWillAppear(_animated: Bool) { var PrimaryVC: ListViewController = UIStoryboard (имя: «Main», Bundle: nil).instantiateViewController (withIdentifier: «ListViewController») как! Листвиевконтроллер var SecondVC: SecondViewController = UIStoryboard (имя: «Main», пакет: ноль).instantiateViewController (withIdentifier: «SecondViewController») как! Секондвиевконтроллер PrimaryVC.delegate = сам SecondVC.view.backgroundColor = UIColor.placeholderText если UIDevice.current.userInterfaceIdiom == .pad { SplitVC.setViewController(primaryVC, для: .primary) SplitVC.setViewController(второйVC, для: .вторичный) SplitVC.preferredDisplayMode = UISplitViewController.DisplayMode.oneBesideSecondary } еще { SplitVC.setViewController(второйVC, для: .primary) SplitVC.setViewController(primaryVC, для: .вторичный) SplitVC.preferredDisplayMode = UISplitViewController.DisplayMode. SecondaryOnly // скрываем кнопку возврата в основной список пусть контроллеры = SplitVC.viewControllers PrimaryVC = (контроллеры [контроллеры.count-1] как! UINavigationController).topViewController как! Листвиевконтроллер PrimaryVC.navigationItem.leftBarButtonItem = SplitVC.displayModeButtonItem PrimaryVC.navigationItem.leftItemsSupplementBackButton = false } addChild (splitVC) SplitVC.view.frame = CGRect (x: 0, y: 0, ширина: UIScreen.main.bounds.size.width, высота: UIScreen.main.bounds.size.height) self.view.addSubview(splitVC.view) SplitVC.didMove(toParent: self) } func SplitViewController (_ svc: UISplitViewController, willChangeTo displayMode: UISplitViewController.DisplayMode) { если UIDevice.current.userInterfaceIdiom == .phone { svc.presentsWithGesture = displayMode != . SecondaryOnly } }
расширение ViewController: TableSelectionDelegate { func selectedRow(row: Int, viewController: UIViewController) {
SplitVC.showDetailViewController(viewController, отправитель: self) }
Я попробовал использовать приведенный выше код, заменив PrimaryVC на .вторичный и SecondaryVC на .primary в SplitView для типа устройства iPhone. В результате я добился желаемого пользовательского интерфейса. SplitVC.setViewController(второйVC, для: .primary) SplitVC.setViewController(primaryVC, для: .вторичный) SplitVC.preferredDisplayMode = UISplitViewController.DisplayMode. SecondaryOnly. Однако я не уверен, был ли этот подход правильным или неправильным. Каким будет лучший подход для достижения желаемого пользовательского интерфейса?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение