@nur_timeline

В SplitViewController при повороте в вертикальное положение показать MasterView или DetailView в зависимости от предыдущего состояния?

Здравствуйте!
Помогите разобраться с Split View Controller пожалуйста!

При повороте в вертикальное положение после: 5c3329a305e0e678535462.png
хотелось показать MasterView: 5c3329fc4e9ed451504491.png
А если после: 5c332a351ad6a272788669.png
то показать DetailView: 5c332a7af3834935314343.png

Storyboard такой: 5c332aa9d6d84010540852.jpeg
Application delegate:

import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        if let svc = self.window?.rootViewController as? UISplitViewController {
            svc.preferredDisplayMode = .allVisible
            if let nc = svc.viewControllers.last as? UINavigationController {
                nc.topViewController?.navigationItem.leftBarButtonItem = svc.displayModeButtonItem
            }
        }       
        let BarButtonItemAppearance = UIBarButtonItem.appearance()
        BarButtonItemAppearance.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.clear], for: .normal)
        BarButtonItemAppearance.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.clear], for: .highlighted)
        return true
    }
}


MasterViewController:
import UIKit
class MasterViewController: UIViewController {
    fileprivate var collapseDetailViewController = true
    override func viewDidLoad() {
        super.viewDidLoad()
        splitViewController?.delegate = self
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        guard let navController = segue.destination as? DetailNavigationViewController,
            let tabController = navController.topViewController as? UITabBarController
            else {
                fatalError("Expected DetailViewController")
        }
        tabController.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
        tabController.navigationItem.leftItemsSupplementBackButton = true   
    }
}
extension MasterViewController: UISplitViewControllerDelegate {
    func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool {
        return collapseDetailViewController
    }
}
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ответы на вопрос 1
doublench21
@doublench21
t.me/jeudesprits (Если очень надо)
Слишком много букаФ. Мне дико лень создавать проект, так что кода не будет. Но твою проблему легко решают две вещи: 1) Size classes/Trait Collection 2) UISplitViewControllerDelegate

Почитай внимательно про них и всё сделаешь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ИНЛАБ Воронеж
от 80 000 до 100 000 руб.
Jibrel Network Санкт-Петербург
от 4 000 usd.
Magora Systems Новосибирск
от 60 000 до 100 000 руб.
26 марта 2019, в 12:03
10000 руб./за проект
26 марта 2019, в 11:56
1 руб./за проект