@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
    }
}
  • Вопрос задан
  • 57 просмотров
Пригласить эксперта
Ответы на вопрос 1
doublench21
@doublench21
t.me/jeudesprits (Если очень надо)
Слишком много букаФ. Мне дико лень создавать проект, так что кода не будет. Но твою проблему легко решают две вещи: 1) Size classes/Trait Collection 2) UISplitViewControllerDelegate

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

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

Войти через TM ID
Похожие вопросы
Hays Russia Москва
от 140 000 до 250 000 руб.
Школа АРТТЕХ Москва
от 60 000 до 100 000 руб.
BTlabs Москва
от 60 000 руб.
20 янв. 2019, в 00:12
16000 руб./за проект
19 янв. 2019, в 23:33
110000 руб./за проект