Постоянное представление с UITabBarController - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь создать приложение с макетом, похожим на Apple Music - навигация по панели вкладок с постоянным представлением, доступным из любого места в приложении.Представление может быть расширено до целого экрана или свернуто при статической высоте 80. Пользовательский интерфейс встроен в раскадровку с обычным значением UITabBarController.Вот первый черновик: 1]

Вот как я его построил:

class TabbarViewController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()
        embedLiveFeedbackController()
    }

    private func embedLiveFeedbackController() {
        guard let feedbackController = UIStoryboard(name: "LiveFeedback", bundle: nil).instantiateInitialViewController() as? LiveFeedbackViewController else { return }

        feedbackController.stateDelegate = self
        addChildViewController(feedbackController)
        view.addSubview(feedbackController.view)

        feedbackController.view.translatesAutoresizingMaskIntoConstraints = false
        feedbackController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        feedbackController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
        feedbackController.view.bottomAnchor.constraint(equalTo: tabBar.topAnchor).isActive = true

        liveFeedbackTopConstraint = feedbackController.view.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor)
        liveFeedbackHeightConstraint = feedbackController.view.heightAnchor.constraint(equalToConstant: Constants.minimizedHeight)

        liveFeedbackHeightConstraint?.isActive = true
        liveFeedbackTopConstraint?.isActive = false

    }
}

У меня проблема в том, что содержимое контроллеров представления скрывается за постоянным представлением ине полностью виденОдна из вещей, которые я пробовал - ограничить контроллеры представления версией постоянного представления:

private func constraintViewControllers() {
    guard let vcs = viewControllers else { return }
    guard let topAnchor = liveFeedbackTopAnchor else { return } // a reference to the top anchor of the persistent view

    for viewController in vcs {
        viewController.view.translatesAutoresizingMaskIntoConstraints = false
        viewController.view.bottomAnchor.constraint(equalTo: topAnchor).isActive = true
    }
}

Конечно, я получаю следующую ошибку:

Unable to activate constraint with anchors <NSLayoutYAxisAnchor:0x600000864640 "UILayoutContainerView:0x7fc813f0ea60.bottom"> and <NSLayoutYAxisAnchor:0x60400047b980 "UIView:0x7fc813f08af0.bottom"> because they have no common ancestor.  Does the constraint or its anchors reference items in different view hierarchies?  That's illegal.'

Любойпредложения, как это осуществить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...