From dfb414c26e7ec638caba2fdc0032ebbc3f1888f1 Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Wed, 19 Oct 2022 11:50:31 +0300 Subject: [PATCH] Prevent `Unable to activate constraint with anchors .. because they have no common ancestor.` crashes. Only link toasts to the top safe area instead of the navigation controller --- .../UserIndicators/ToastViewPresenter.swift | 32 +++---------------- 1 file changed, 5 insertions(+), 27 deletions(-) diff --git a/ElementX/Sources/Other/UserIndicators/ToastViewPresenter.swift b/ElementX/Sources/Other/UserIndicators/ToastViewPresenter.swift index adc8a348e..b8e005138 100644 --- a/ElementX/Sources/Other/UserIndicators/ToastViewPresenter.swift +++ b/ElementX/Sources/Other/UserIndicators/ToastViewPresenter.swift @@ -19,10 +19,6 @@ import UIKit /// A presenter responsible for showing / hiding a toast view for loading spinners or success messages. /// It is managed by an `UserIndicator`, meaning the `present` and `dismiss` methods will be called when the parent `UserIndicator` starts or completes. class ToastViewPresenter: UserIndicatorViewPresentable { - enum Constants { - static let navigationBarPatting = CGFloat(10) - } - private let viewState: ToastViewState private let presentationContext: UserIndicatorPresentationContext private weak var view: UIView? @@ -42,19 +38,11 @@ class ToastViewPresenter: UserIndicatorViewPresentable { self.view = view view.translatesAutoresizingMaskIntoConstraints = false - if let navigation = viewController.topNavigationController { - navigation.view.addSubview(view) - NSLayoutConstraint.activate([ - view.centerXAnchor.constraint(equalTo: navigation.view.centerXAnchor), - view.topAnchor.constraint(equalTo: navigation.navigationBar.safeAreaLayoutGuide.bottomAnchor, constant: -Constants.navigationBarPatting) - ]) - } else { - viewController.view.addSubview(view) - NSLayoutConstraint.activate([ - view.centerXAnchor.constraint(equalTo: viewController.view.centerXAnchor), - view.topAnchor.constraint(equalTo: viewController.view.topAnchor) - ]) - } + viewController.view.addSubview(view) + NSLayoutConstraint.activate([ + view.centerXAnchor.constraint(equalTo: viewController.view.centerXAnchor), + view.topAnchor.constraint(equalTo: viewController.view.safeAreaLayoutGuide.topAnchor) + ]) view.alpha = 0 view.transform = .init(translationX: 0, y: 5) @@ -81,13 +69,3 @@ class ToastViewPresenter: UserIndicatorViewPresentable { animator?.startAnimation() } } - -private extension UIViewController { - var topNavigationController: UINavigationController? { - var controller: UINavigationController? = self as? UINavigationController ?? navigationController - while controller?.navigationController != nil { - controller = controller?.navigationController - } - return controller - } -}