diff --git a/iphone/Maps/UI/AvailableArea/AvailableArea.swift b/iphone/Maps/UI/AvailableArea/AvailableArea.swift index d44f7d8433..34c892f637 100644 --- a/iphone/Maps/UI/AvailableArea/AvailableArea.swift +++ b/iphone/Maps/UI/AvailableArea/AvailableArea.swift @@ -5,6 +5,31 @@ class AvailableArea: UIView { var deferNotification: Bool { return true } + private var orientation = UIDeviceOrientation.unknown { + didSet { + scheduleNotification() + } + } + var areaFrame: CGRect { + return alternative(iPhone: { + var frame = self.frame + if #available(iOS 11.0, *), let insets = UIApplication.shared.delegate?.window??.safeAreaInsets { + if insets.top > 0 || insets.left > 0 || insets.bottom > 0 || insets.right > 0 { + switch self.orientation { + case .landscapeLeft: + frame.origin.x -= 20 + frame.size.width += 64 + case .landscapeRight: + frame.origin.x -= 44 + frame.size.width += 60 + default: break + } + } + } + return frame + }, iPad: { self.frame })() + } + private var affectingViews = Set() override func didMoveToSuperview() { @@ -20,11 +45,20 @@ class AvailableArea: UIView { private func subscribe() { guard let ol = superview?.layer else { return } ol.addObserver(self, forKeyPath: Const.observeKeyPath, options: .new, context: nil) + UIDevice.current.beginGeneratingDeviceOrientationNotifications() + + let nc = NotificationCenter.default + nc.addObserver(forName: .UIDeviceOrientationDidChange, object: nil, queue: OperationQueue.main) { _ in + let orientation = UIDevice.current.orientation + guard !orientation.isFlat else { return } + self.orientation = orientation + } } private func unsubscribe() { guard let ol = superview?.layer else { return } ol.removeObserver(self, forKeyPath: Const.observeKeyPath) + UIDevice.current.endGeneratingDeviceOrientationNotifications() } override func observeValue(forKeyPath keyPath: String?, of _: Any?, change _: [NSKeyValueChangeKey: Any]?, context _: UnsafeMutableRawPointer?) { diff --git a/iphone/Maps/UI/AvailableArea/MenuArea.swift b/iphone/Maps/UI/AvailableArea/MenuArea.swift index 8e5c4a368b..4cb366b572 100644 --- a/iphone/Maps/UI/AvailableArea/MenuArea.swift +++ b/iphone/Maps/UI/AvailableArea/MenuArea.swift @@ -1,4 +1,8 @@ final class MenuArea: AvailableArea { + override var areaFrame: CGRect { + return frame + } + override func isAreaAffectingView(_ other: UIView) -> Bool { return !other.menuAreaAffectDirections.isEmpty } @@ -10,7 +14,7 @@ final class MenuArea: AvailableArea { } override func notifyObserver() { - MWMBottomMenuViewController.updateAvailableArea(frame) + MWMBottomMenuViewController.updateAvailableArea(areaFrame) } } diff --git a/iphone/Maps/UI/AvailableArea/NavigationInfoArea.swift b/iphone/Maps/UI/AvailableArea/NavigationInfoArea.swift index da57a6813b..bd3c7bfd8f 100644 --- a/iphone/Maps/UI/AvailableArea/NavigationInfoArea.swift +++ b/iphone/Maps/UI/AvailableArea/NavigationInfoArea.swift @@ -10,7 +10,7 @@ final class NavigationInfoArea: AvailableArea { } override func notifyObserver() { - MWMNavigationDashboardManager.updateNavigationInfoAvailableArea(frame) + MWMNavigationDashboardManager.updateNavigationInfoAvailableArea(areaFrame) } } diff --git a/iphone/Maps/UI/AvailableArea/PlacePageArea.swift b/iphone/Maps/UI/AvailableArea/PlacePageArea.swift index 4cd083c405..01ce3137c8 100644 --- a/iphone/Maps/UI/AvailableArea/PlacePageArea.swift +++ b/iphone/Maps/UI/AvailableArea/PlacePageArea.swift @@ -10,7 +10,7 @@ final class PlacePageArea: AvailableArea { } override func notifyObserver() { - MWMPlacePageManagerHelper.updateAvailableArea(frame) + MWMPlacePageManagerHelper.updateAvailableArea(areaFrame) } } diff --git a/iphone/Maps/UI/AvailableArea/SideButtonsArea.swift b/iphone/Maps/UI/AvailableArea/SideButtonsArea.swift index ac009ed23a..b9a55b31ac 100644 --- a/iphone/Maps/UI/AvailableArea/SideButtonsArea.swift +++ b/iphone/Maps/UI/AvailableArea/SideButtonsArea.swift @@ -12,7 +12,7 @@ final class SideButtonsArea: AvailableArea { } override func notifyObserver() { - MWMSideButtons.updateAvailableArea(frame) + MWMSideButtons.updateAvailableArea(areaFrame) } } diff --git a/iphone/Maps/UI/AvailableArea/TrafficButtonArea.swift b/iphone/Maps/UI/AvailableArea/TrafficButtonArea.swift index a7090b3ef3..8747e23f45 100644 --- a/iphone/Maps/UI/AvailableArea/TrafficButtonArea.swift +++ b/iphone/Maps/UI/AvailableArea/TrafficButtonArea.swift @@ -10,7 +10,7 @@ final class TrafficButtonArea: AvailableArea { } override func notifyObserver() { - MWMTrafficButtonViewController.updateAvailableArea(frame) + MWMTrafficButtonViewController.updateAvailableArea(areaFrame) } } diff --git a/iphone/Maps/UI/AvailableArea/VisibleArea.swift b/iphone/Maps/UI/AvailableArea/VisibleArea.swift index 7d2512cb4c..ce38f76470 100644 --- a/iphone/Maps/UI/AvailableArea/VisibleArea.swift +++ b/iphone/Maps/UI/AvailableArea/VisibleArea.swift @@ -10,7 +10,7 @@ final class VisibleArea: AvailableArea { } override func notifyObserver() { - MWMFrameworkHelper.setVisibleViewport(frame) + MWMFrameworkHelper.setVisibleViewport(areaFrame) } } diff --git a/iphone/Maps/UI/AvailableArea/WidgetsArea.swift b/iphone/Maps/UI/AvailableArea/WidgetsArea.swift index 49e7551451..05a648c269 100644 --- a/iphone/Maps/UI/AvailableArea/WidgetsArea.swift +++ b/iphone/Maps/UI/AvailableArea/WidgetsArea.swift @@ -10,7 +10,7 @@ final class WidgetsArea: AvailableArea { } override func notifyObserver() { - MWMMapWidgetsHelper.updateAvailableArea(frame) + MWMMapWidgetsHelper.updateAvailableArea(areaFrame) } }