From 9f5685a2f8f0e63991dd9c4c9ea85b15414ea915 Mon Sep 17 00:00:00 2001 From: Tsanie Lily Date: Mon, 11 May 2020 19:52:00 +0800 Subject: [PATCH] add file --- .../AppShellSection/AppAppearanceTracker.cs | 153 ++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 Pixiview.iOS/Renderers/AppShellSection/AppAppearanceTracker.cs diff --git a/Pixiview.iOS/Renderers/AppShellSection/AppAppearanceTracker.cs b/Pixiview.iOS/Renderers/AppShellSection/AppAppearanceTracker.cs new file mode 100644 index 0000000..cd77132 --- /dev/null +++ b/Pixiview.iOS/Renderers/AppShellSection/AppAppearanceTracker.cs @@ -0,0 +1,153 @@ +using CoreGraphics; +using UIKit; +using Xamarin.Forms; +using Xamarin.Forms.Platform.iOS; + +namespace Pixiview.iOS.Renderers.AppShellSection +{ + public class AppShellNavBarAppearanceTracker : IShellNavBarAppearanceTracker + { + UIColor _defaultBarTint; + UIColor _defaultTint; + UIStringAttributes _defaultTitleAttributes; + float _shadowOpacity = float.MinValue; + CGColor _shadowColor; + + public void ResetAppearance(UINavigationController controller) + { + if (_defaultTint != null) + { + var navBar = controller.NavigationBar; + navBar.TintColor = _defaultBarTint; + navBar.TintColor = _defaultTint; + navBar.TitleTextAttributes = _defaultTitleAttributes; + } + } + + public void SetAppearance(UINavigationController controller, ShellAppearance appearance) + { + var background = appearance.BackgroundColor; + var foreground = appearance.ForegroundColor; + var titleColor = appearance.TitleColor; + + var navBar = controller.NavigationBar; + + if (_defaultTint == null) + { + _defaultBarTint = navBar.BarTintColor; + _defaultTint = navBar.TintColor; + _defaultTitleAttributes = navBar.TitleTextAttributes; + } + + if (UIDevice.CurrentDevice.CheckSystemVersion(13, 0)) + { + navBar.TintColor = UIColor.SecondaryLabelColor; + } + else + { + if (!background.IsDefault) + navBar.BarTintColor = background.ToUIColor(); + if (!foreground.IsDefault) + navBar.TintColor = foreground.ToUIColor(); + if (!titleColor.IsDefault) + { + navBar.TitleTextAttributes = new UIStringAttributes + { + ForegroundColor = titleColor.ToUIColor() + }; + } + } + } + + public void SetHasShadow(UINavigationController controller, bool hasShadow) + { + var navigationBar = controller.NavigationBar; + if (_shadowOpacity == float.MinValue) + { + // Don't do anything if user hasn't changed the shadow to true + if (!hasShadow) + return; + + _shadowOpacity = navigationBar.Layer.ShadowOpacity; + _shadowColor = navigationBar.Layer.ShadowColor; + } + + if (hasShadow) + { + navigationBar.Layer.ShadowColor = UIColor.Black.CGColor; + navigationBar.Layer.ShadowOpacity = 1.0f; + } + else + { + navigationBar.Layer.ShadowColor = _shadowColor; + navigationBar.Layer.ShadowOpacity = _shadowOpacity; + } + } + + public void Dispose() + { + } + + public void UpdateLayout(UINavigationController controller) + { + } + } + + public class AppShellTabBarAppearanceTracker : IShellTabBarAppearanceTracker + { + UIColor _defaultBarTint; + UIColor _defaultTint; + UIColor _defaultUnselectedTint; + + public void ResetAppearance(UITabBarController controller) + { + if (_defaultTint == null) + return; + + var tabBar = controller.TabBar; + tabBar.BarTintColor = _defaultBarTint; + tabBar.TintColor = _defaultTint; + tabBar.UnselectedItemTintColor = _defaultUnselectedTint; + } + + public void SetAppearance(UITabBarController controller, ShellAppearance appearance) + { + IShellAppearanceElement appearanceElement = appearance; + var backgroundColor = appearanceElement.EffectiveTabBarBackgroundColor; + var unselectedColor = appearanceElement.EffectiveTabBarUnselectedColor; + var tintColor = appearanceElement.EffectiveTabBarForegroundColor; // appearanceElement.EffectiveTabBarTitleColor; + + var tabBar = controller.TabBar; + + if (_defaultTint == null) + { + _defaultBarTint = tabBar.BarTintColor; + _defaultTint = tabBar.TintColor; + _defaultUnselectedTint = tabBar.UnselectedItemTintColor; + } + + if (UIDevice.CurrentDevice.CheckSystemVersion(13, 0)) + { + tabBar.TintColor = UIColor.LabelColor; + //tabBar.UnselectedItemTintColor = UIColor.TertiaryLabelColor; + } + else + { + if (!backgroundColor.IsDefault) + tabBar.BarTintColor = backgroundColor.ToUIColor(); + if (!tintColor.IsDefault) + tabBar.TintColor = tintColor.ToUIColor(); + if (!unselectedColor.IsDefault) + tabBar.UnselectedItemTintColor = unselectedColor.ToUIColor(); + } + } + + public void Dispose() + { + } + + public void UpdateLayout(UITabBarController controller) + { + } + } +}