From 1cbe25e5bc6ca9dd0662b029d45c6ff2b15f5fe4 Mon Sep 17 00:00:00 2001 From: Kiryl Kaveryn Date: Thu, 13 Feb 2025 17:18:18 +0400 Subject: [PATCH] [ios] fix route planning reloading ui bug The bottom route status view sometimes jumps from the top to the bottom during the 1st rendering. It happens because the view's frame is not calculated on the isVisible because the view is not init/deinit multiple times during the route building state changing. The bottom view now only changes its visibility and constraints, not the init/deinit on every update. Signed-off-by: Kiryl Kaveryn --- .../NavigationDashboard/MWMNavigationDashboardManager.mm | 8 +++----- .../RoutePreviewStatus/BaseRoutePreviewStatus.swift | 9 +++------ 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.mm b/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.mm index 42551ba1dc..43c06fb061 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.mm +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.mm @@ -134,8 +134,7 @@ NSString *const kNavigationControlViewXibName = @"NavigationControlView"; self.navigationInfoView = nil; _navigationControlView.isVisible = NO; _navigationControlView = nil; - [_baseRoutePreviewStatus hide]; - _baseRoutePreviewStatus = nil; + [self.baseRoutePreviewStatus hide]; [_transportRoutePreviewStatus hide]; _transportRoutePreviewStatus = nil; } @@ -147,7 +146,7 @@ NSString *const kNavigationControlViewXibName = @"NavigationControlView"; [routePreview statePrepare]; [routePreview selectRouter:[MWMRouter type]]; [self updateGoButtonTitle]; - [_baseRoutePreviewStatus hide]; + [self.baseRoutePreviewStatus hide]; [_transportRoutePreviewStatus hide]; for (MWMRouteStartButton *button in self.goButtons) [button statePrepare]; @@ -204,8 +203,7 @@ NSString *const kNavigationControlViewXibName = @"NavigationControlView"; self.routePreview = nil; self.navigationInfoView.state = MWMNavigationInfoViewStateNavigation; self.navigationControlView.isVisible = YES; - [_baseRoutePreviewStatus hide]; - _baseRoutePreviewStatus = nil; + [self.baseRoutePreviewStatus hide]; [_transportRoutePreviewStatus hide]; _transportRoutePreviewStatus = nil; [self onNavigationInfoUpdated]; 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 73cd7a798f..d01a7897c1 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/RoutePreviewStatus/BaseRoutePreviewStatus.swift +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/RoutePreviewStatus/BaseRoutePreviewStatus.swift @@ -51,12 +51,8 @@ final class BaseRoutePreviewStatus: SolidTouchView { private var isVisible = false { didSet { - guard isVisible != oldValue else { return } - if isVisible { - addView() - } else { - self.removeFromSuperview() - } + addView() + isHidden = !isVisible } } @@ -68,6 +64,7 @@ final class BaseRoutePreviewStatus: SolidTouchView { leadingAnchor.constraint(equalTo: lg.leadingAnchor).isActive = true trailingAnchor.constraint(equalTo: lg.trailingAnchor).isActive = true bottomAnchor.constraint(equalTo: lg.bottomAnchor).isActive = true + ownerView.layoutIfNeeded() } private func updateHeight() {