using System.Diagnostics.CodeAnalysis; 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() { } [SuppressMessage("Code Notifications", "XI0001:Notifies you with advices on how to use Apple APIs", Justification = "")] public void UpdateLayout(UITabBarController controller) { var tabBar = controller.TabBar; if (tabBar != null && tabBar.Items != null && tabBar.Items.Length == 4) { var tabUser = tabBar.Items[0]; tabUser.Image = UIImage.FromBundle("IconUserRegular"); tabUser.SelectedImage = UIImage.FromBundle("IconUser"); var tabRecommend = tabBar.Items[1]; tabRecommend.Image = UIImage.FromBundle("IconSparklesRegular"); tabRecommend.SelectedImage = UIImage.FromBundle("IconSparkles"); var tabRank = tabBar.Items[2]; tabRank.Image = UIImage.FromBundle("IconSortRegular"); tabRank.SelectedImage = UIImage.FromBundle("IconSort"); var tabFavorite = tabBar.Items[3]; tabFavorite.Image = UIImage.FromBundle("IconBookmarkRegular"); tabFavorite.SelectedImage = UIImage.FromBundle("IconBookmark"); } } } }