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)
+        {
+        }
+    }
+}