From 99c1a621b26d5756b6e1be9d83acd3328ad62c14 Mon Sep 17 00:00:00 2001 From: Alexander Borsuk Date: Sat, 22 May 2021 22:05:30 +0200 Subject: [PATCH] [ios] Fixed disappearing navigation bar at the bottom TODO: Improve the code and fix not beautiful appear animation Signed-off-by: Alexander Borsuk --- .../Views/NavigationControlView.swift | 45 +++++++------------ .../Views/NavigationControlView.xib | 7 ++- .../BaseRoutePreviewStatus.swift | 40 +++-------------- .../TransportRoutePreviewStatus.swift | 38 +++------------- 4 files changed, 30 insertions(+), 100 deletions(-) diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/NavigationControlView.swift b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/NavigationControlView.swift index a827bddcbf..812620d2c3 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/NavigationControlView.swift +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/NavigationControlView.swift @@ -47,8 +47,8 @@ final class NavigationControlView: SolidTouchView, MWMTextToSpeechObserver, MapO private weak var navigationInfo: MWMNavigationDashboardEntity? - private var hiddenConstraint: NSLayoutConstraint! private var extendedConstraint: NSLayoutConstraint! + private var notExtendedConstraint: NSLayoutConstraint! @objc var isVisible = false { didSet { guard isVisible != oldValue else { return } @@ -57,13 +57,6 @@ final class NavigationControlView: SolidTouchView, MWMTextToSpeechObserver, MapO } else { removeView() } - alpha = isVisible ? 0 : 1 - DispatchQueue.main.async { - self.superview?.animateConstraints { - self.alpha = self.isVisible ? 1 : 0 - self.hiddenConstraint.isActive = !self.isVisible - } - } } } @@ -79,7 +72,13 @@ final class NavigationControlView: SolidTouchView, MWMTextToSpeechObserver, MapO dimBackground.setVisible(isExtended, completion: nil) extendedView.isHidden = !isExtended superview!.animateConstraints(animations: { - self.extendedConstraint.isActive = self.isExtended + if (self.isExtended) { + self.notExtendedConstraint.isActive = false + self.extendedConstraint.isActive = true + } else { + self.extendedConstraint.isActive = false + self.notExtendedConstraint.isActive = true + } }) } } @@ -88,28 +87,15 @@ final class NavigationControlView: SolidTouchView, MWMTextToSpeechObserver, MapO guard superview != ownerView else { return } ownerView.addSubview(self) - var lAnchor = ownerView.leadingAnchor - var tAnchor = ownerView.trailingAnchor - var bAnchor = ownerView.bottomAnchor - let layoutGuide = ownerView.safeAreaLayoutGuide - lAnchor = layoutGuide.leadingAnchor - tAnchor = layoutGuide.trailingAnchor - bAnchor = layoutGuide.bottomAnchor + let lg = ownerView.safeAreaLayoutGuide + leadingAnchor.constraint(equalTo: lg.leadingAnchor).isActive = true + trailingAnchor.constraint(equalTo: lg.trailingAnchor).isActive = true - leadingAnchor.constraint(equalTo: lAnchor).isActive = true - trailingAnchor.constraint(equalTo: tAnchor).isActive = true + extendedConstraint = bottomAnchor.constraint(equalTo: lg.bottomAnchor) + extendedConstraint.isActive = false - hiddenConstraint = topAnchor.constraint(equalTo: ownerView.bottomAnchor) - hiddenConstraint.isActive = true - - let visibleConstraint = progressView.bottomAnchor.constraint(equalTo: bAnchor) - visibleConstraint.priority = UILayoutPriority.defaultLow - visibleConstraint.isActive = true - - extendedConstraint = bottomAnchor.constraint(equalTo: bAnchor) - extendedConstraint.priority = UILayoutPriority(rawValue: UILayoutPriority.RawValue(Int(UILayoutPriority.defaultHigh.rawValue) - 1)) - - ownerView.layoutIfNeeded() + notExtendedConstraint = progressView.bottomAnchor.constraint(equalTo: lg.bottomAnchor) + notExtendedConstraint.isActive = true } private func removeView() { @@ -120,7 +106,6 @@ final class NavigationControlView: SolidTouchView, MWMTextToSpeechObserver, MapO override func awakeFromNib() { super.awakeFromNib() - translatesAutoresizingMaskIntoConstraints = false updateLegendSize() diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/NavigationControlView.xib b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/NavigationControlView.xib index e5541a9f33..3ce46013e0 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/NavigationControlView.xib +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/NavigationControlView.xib @@ -1,9 +1,9 @@ - + - + @@ -14,9 +14,8 @@ - + - diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/RoutePreviewStatus/BaseRoutePreviewStatus.swift b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/RoutePreviewStatus/BaseRoutePreviewStatus.swift index ef74432bb0..e9a735e468 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/RoutePreviewStatus/BaseRoutePreviewStatus.swift +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/RoutePreviewStatus/BaseRoutePreviewStatus.swift @@ -35,7 +35,6 @@ final class BaseRoutePreviewStatus: SolidTouchView { @IBOutlet private var manageRouteBoxBottom: NSLayoutConstraint! @IBOutlet private var heightBoxBottomManageRouteBoxTop: NSLayoutConstraint! - private var hiddenConstraint: NSLayoutConstraint! @objc weak var ownerView: UIView! weak var navigationInfo: MWMNavigationDashboardEntity? @@ -51,16 +50,8 @@ final class BaseRoutePreviewStatus: SolidTouchView { guard isVisible != oldValue else { return } if isVisible { addView() - } - DispatchQueue.main.async { - guard let sv = self.superview else { return } - sv.animateConstraints(animations: { - self.hiddenConstraint.isActive = !self.isVisible - }, completion: { - if !self.isVisible { - self.removeFromSuperview() - } - }) + } else { + self.removeFromSuperview() } } } @@ -69,29 +60,10 @@ final class BaseRoutePreviewStatus: SolidTouchView { guard superview != ownerView else { return } ownerView.addSubview(self) - addConstraints() - } - - private func addConstraints() { - var lAnchor = ownerView.leadingAnchor - var tAnchor = ownerView.trailingAnchor - var bAnchor = ownerView.bottomAnchor - let layoutGuide = ownerView.safeAreaLayoutGuide - lAnchor = layoutGuide.leadingAnchor - tAnchor = layoutGuide.trailingAnchor - bAnchor = layoutGuide.bottomAnchor - - leadingAnchor.constraint(equalTo: lAnchor).isActive = true - trailingAnchor.constraint(equalTo: tAnchor).isActive = true - hiddenConstraint = topAnchor.constraint(equalTo: bAnchor) - hiddenConstraint.priority = UILayoutPriority.defaultHigh - hiddenConstraint.isActive = true - - let visibleConstraint = bottomAnchor.constraint(equalTo: bAnchor) - visibleConstraint.priority = UILayoutPriority.defaultLow - visibleConstraint.isActive = true - - ownerView.layoutIfNeeded() + let lg = ownerView.safeAreaLayoutGuide + leadingAnchor.constraint(equalTo: lg.leadingAnchor).isActive = true + trailingAnchor.constraint(equalTo: lg.trailingAnchor).isActive = true + bottomAnchor.constraint(equalTo: lg.bottomAnchor).isActive = true } private func updateHeight() { diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/RoutePreviewStatus/TransportRoutePreviewStatus.swift b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/RoutePreviewStatus/TransportRoutePreviewStatus.swift index 7c79191560..b731110b99 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/RoutePreviewStatus/TransportRoutePreviewStatus.swift +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/RoutePreviewStatus/TransportRoutePreviewStatus.swift @@ -4,7 +4,6 @@ final class TransportRoutePreviewStatus: SolidTouchView { @IBOutlet private weak var stepsCollectionView: TransportTransitStepsCollectionView! @IBOutlet private weak var stepsCollectionViewHeight: NSLayoutConstraint! - private var hiddenConstraint: NSLayoutConstraint! @objc weak var ownerView: UIView! weak var navigationInfo: MWMNavigationDashboardEntity? @@ -14,16 +13,8 @@ final class TransportRoutePreviewStatus: SolidTouchView { guard isVisible != oldValue else { return } if isVisible { addView() - } - DispatchQueue.main.async { - guard let sv = self.superview else { return } - sv.animateConstraints(animations: { - self.hiddenConstraint.isActive = !self.isVisible - }, completion: { - if !self.isVisible { - self.removeFromSuperview() - } - }) + } else { + self.removeFromSuperview() } } } @@ -32,27 +23,10 @@ final class TransportRoutePreviewStatus: SolidTouchView { guard superview != ownerView else { return } ownerView.addSubview(self) - addConstraints() - } - - private func addConstraints() { - var lAnchor = ownerView.leadingAnchor - var tAnchor = ownerView.trailingAnchor - var bAnchor = ownerView.bottomAnchor - let layoutGuide = ownerView.safeAreaLayoutGuide - lAnchor = layoutGuide.leadingAnchor - tAnchor = layoutGuide.trailingAnchor - bAnchor = layoutGuide.bottomAnchor - - leadingAnchor.constraint(equalTo: lAnchor).isActive = true - trailingAnchor.constraint(equalTo: tAnchor).isActive = true - hiddenConstraint = topAnchor.constraint(equalTo: bAnchor) - hiddenConstraint.priority = UILayoutPriority.defaultHigh - hiddenConstraint.isActive = true - - let visibleConstraint = bottomAnchor.constraint(equalTo: bAnchor) - visibleConstraint.priority = UILayoutPriority.defaultLow - visibleConstraint.isActive = true + let lg = ownerView.safeAreaLayoutGuide + leadingAnchor.constraint(equalTo: lg.leadingAnchor).isActive = true + trailingAnchor.constraint(equalTo: lg.trailingAnchor).isActive = true + bottomAnchor.constraint(equalTo: lg.bottomAnchor).isActive = true } @objc func hide() {