add file
This commit is contained in:
		
							
								
								
									
										153
									
								
								Pixiview.iOS/Renderers/AppShellSection/AppAppearanceTracker.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										153
									
								
								Pixiview.iOS/Renderers/AppShellSection/AppAppearanceTracker.cs
									
									
									
									
									
										Normal file
									
								
							@@ -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)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user