Actualmente estoy trabajando en una aplicación iOS y quiero usar un cajón de navegación inferior de material-io. Así que lo hice como se explica en los ejemplos del sitio . Pero cuando presento el Cajón de navegación, el ViewController solo se oscurece un poco y no se muestra la vista de contenido del cajón.
Aquí está mi código:
import Foundation import UIKit import MaterialComponents class CreateSubjectView: UIViewController, UITextFieldDelegate { ... override func viewDidLoad() { ... let bottomDrawerViewController = MDCBottomDrawerViewController() self.modalPresentationStyle = .popover let newViewController = self.storyboard?.instantiateViewController(withIdentifier: "TEST") bottomDrawerViewController.contentViewController = newViewController present(bottomDrawerViewController, animated: true, completion: nil) ... } ... }El controlador de vista que se mostrará en el cajón debe tener un tamaño de contenido preferido especificado.
Aquí hay una demostración del controlador mínimo. ( Nota: modalPresentationStyle = .popover no tiene efecto en MDCBottomDrawerViewController )
Probado con Xcode 12
// button action in parent controller @objc private func presentNavigationDrawer() { let bottomDrawerViewController = MDCBottomDrawerViewController() bottomDrawerViewController.contentViewController = DemoViewController() present(bottomDrawerViewController, animated: true, completion: nil) } } class DemoViewController: UIViewController { override func loadView() { super.loadView() let view = UIView() view.backgroundColor = .red self.view = view } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() // specify your content preferred height explicitly self.preferredContentSize = CGSize(width: 0, height: 400) // required !! } @available(iOS 11.0, *) override func viewSafeAreaInsetsDidChange() { super.viewSafeAreaInsetsDidChange() // specify your content preferred height explicitly self.preferredContentSize = CGSize(width: 0, height: 400) // required !! } }Mueva esto a viewWillAppear / viewDidAppear una vez, ya que es demasiado pronto para que viewDidLoad presente un vc
class CreateSubjectView: UIViewController, UITextFieldDelegate { let bottomDrawerViewController = MDCBottomDrawerViewController() var once = true override func viewDidLoad() { super.viewDidLoad() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) if once { let newViewController = self.storyboard?.instantiateViewController(withIdentifier: "TEST") bottomDrawerViewController.contentViewController = newViewController present(bottomDrawerViewController, animated: true, completion: nil) once = false } } }