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

This commit is contained in:
Stefan Ceriu 2022-10-19 11:50:31 +03:00 committed by Stefan Ceriu
parent 4fc7bf3d6c
commit dfb414c26e

View File

@ -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
}
}