diff options
author | Samantha Houts <samantha@teamredwall.com> | 2016-06-28 03:25:45 -0700 |
---|---|---|
committer | Rui Marinho <me@ruimarinho.net> | 2016-06-28 11:25:45 +0100 |
commit | 0772a5278b96f289ff216f10da86b072bc6edbf1 (patch) | |
tree | dbf54e33abc93749d230b6ba6996abcd653f5d89 | |
parent | 589adbd3ef145ec85f9fe64eda008251c1cdb745 (diff) | |
download | xamarin-forms-0772a5278b96f289ff216f10da86b072bc6edbf1.tar.gz xamarin-forms-0772a5278b96f289ff216f10da86b072bc6edbf1.tar.bz2 xamarin-forms-0772a5278b96f289ff216f10da86b072bc6edbf1.zip |
[iOS] Default BarTextColor/BarBackgroundColor will no longer override values set in custom renderers (#233)beta-2.3.1-pre1
* [Controls] Improve TabbedPage test case
iOS should default to the color used in a custom renderer instead of to
the global default color.
* [iOS] TabbedPage Bar*Color default is better
Will use the color set by a custom renderer, if any, instead of always
pulling from global appearance.
-rw-r--r-- | Xamarin.Forms.ControlGallery.iOS/CustomRenderers.cs | 13 | ||||
-rw-r--r-- | Xamarin.Forms.Controls/CoreGallery.cs | 15 | ||||
-rw-r--r-- | Xamarin.Forms.Platform.iOS/Renderers/TabbedRenderer.cs | 48 |
3 files changed, 63 insertions, 13 deletions
diff --git a/Xamarin.Forms.ControlGallery.iOS/CustomRenderers.cs b/Xamarin.Forms.ControlGallery.iOS/CustomRenderers.cs index 44d86644..92b58455 100644 --- a/Xamarin.Forms.ControlGallery.iOS/CustomRenderers.cs +++ b/Xamarin.Forms.ControlGallery.iOS/CustomRenderers.cs @@ -28,7 +28,7 @@ using MonoTouch.CoreLocation; [assembly: ExportRenderer(typeof(NativeListView2), typeof(NativeiOSListViewRenderer))] [assembly: ExportRenderer(typeof(NativeListView), typeof(NativeListViewRenderer))] [assembly: ExportRenderer(typeof(CustomMapView), typeof(CustomIOSMapRenderer))] - +[assembly: ExportRenderer(typeof(TabbedPage), typeof(TabbedPageWithCustomBarColorRenderer))] namespace Xamarin.Forms.ControlGallery.iOS { public class CustomIOSMapRenderer : ViewRenderer<CustomMapView, MKMapView> @@ -593,5 +593,16 @@ namespace Xamarin.Forms.ControlGallery.iOS } } + public class TabbedPageWithCustomBarColorRenderer : TabbedRenderer + { + public TabbedPageWithCustomBarColorRenderer() + { + TabBar.TintColor = UIColor.White; + TabBar.BarTintColor = UIColor.Purple; + + //UITabBar.Appearance.TintColor = UIColor.White; + //UITabBar.Appearance.BarTintColor = UIColor.Purple; + } + } } diff --git a/Xamarin.Forms.Controls/CoreGallery.cs b/Xamarin.Forms.Controls/CoreGallery.cs index bf4fe399..8fd1f7bc 100644 --- a/Xamarin.Forms.Controls/CoreGallery.cs +++ b/Xamarin.Forms.Controls/CoreGallery.cs @@ -96,12 +96,17 @@ namespace Xamarin.Forms.Controls { AutomationId = "TabbedPageRoot"; - BarBackgroundColor = Color.Maroon; - BarTextColor = Color.Yellow; - Device.StartTimer(TimeSpan.FromSeconds(2), () => { - BarBackgroundColor = Color.Default; - BarTextColor = Color.Default; + Device.StartTimer(TimeSpan.FromSeconds(6), () => { + BarBackgroundColor = Color.Maroon; + BarTextColor = Color.Yellow; + + Device.StartTimer(TimeSpan.FromSeconds(6), () => { + BarBackgroundColor = Color.Default; + BarTextColor = Color.Default; + + return false; + }); return false; }); diff --git a/Xamarin.Forms.Platform.iOS/Renderers/TabbedRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/TabbedRenderer.cs index 25fceb41..695ce2ac 100644 --- a/Xamarin.Forms.Platform.iOS/Renderers/TabbedRenderer.cs +++ b/Xamarin.Forms.Platform.iOS/Renderers/TabbedRenderer.cs @@ -24,6 +24,12 @@ namespace Xamarin.Forms.Platform.iOS { public class TabbedRenderer : UITabBarController, IVisualElementRenderer, IEffectControlProvider { + bool _barBackgroundColorWasSet; + bool _barTextColorWasSet; + UIColor _defaultBarTextColor; + bool _defaultBarTextColorSet; + UIColor _defaultBarColor; + bool _defaultBarColorSet; bool _loaded; Size _queuedSize; @@ -309,14 +315,31 @@ namespace Xamarin.Forms.Platform.iOS return; var barBackgroundColor = Tabbed.BarBackgroundColor; + var isDefaultColor = barBackgroundColor.IsDefault; + + if (isDefaultColor && !_barBackgroundColorWasSet) + return; + + if (!_defaultBarColorSet) + { + if (Forms.IsiOS7OrNewer) + _defaultBarColor = TabBar.BarTintColor; + else + _defaultBarColor = TabBar.TintColor; + + _defaultBarColorSet = true; + } + + if (!isDefaultColor) + _barBackgroundColorWasSet = true; if (Forms.IsiOS7OrNewer) { - TabBar.BarTintColor = barBackgroundColor == Color.Default ? UINavigationBar.Appearance.BarTintColor : barBackgroundColor.ToUIColor(); + TabBar.BarTintColor = isDefaultColor ? _defaultBarColor : barBackgroundColor.ToUIColor(); } else { - TabBar.TintColor = barBackgroundColor == Color.Default ? UINavigationBar.Appearance.TintColor : barBackgroundColor.ToUIColor(); + TabBar.TintColor = isDefaultColor ? _defaultBarColor : barBackgroundColor.ToUIColor(); } } @@ -326,13 +349,24 @@ namespace Xamarin.Forms.Platform.iOS return; var barTextColor = Tabbed.BarTextColor; + var isDefaultColor = barTextColor.IsDefault; + + if (isDefaultColor && !_barTextColorWasSet) + return; + + if (!_defaultBarTextColorSet) + { + _defaultBarTextColor = TabBar.TintColor; + _defaultBarTextColorSet = true; + } - var globalAttributes = UINavigationBar.Appearance.GetTitleTextAttributes(); + if (!isDefaultColor) + _barTextColorWasSet = true; - var attributes = new UITextAttributes { Font = globalAttributes.Font }; + var attributes = new UITextAttributes(); - if (barTextColor == Color.Default) - attributes.TextColor = globalAttributes.TextColor; + if (isDefaultColor) + attributes.TextColor = _defaultBarTextColor; else attributes.TextColor = barTextColor.ToUIColor(); @@ -345,7 +379,7 @@ namespace Xamarin.Forms.Platform.iOS // setting the unselected icon tint is not supported by iOS if (Forms.IsiOS7OrNewer) { - TabBar.TintColor = barTextColor == Color.Default ? UINavigationBar.Appearance.TintColor : barTextColor.ToUIColor(); + TabBar.TintColor = isDefaultColor ? _defaultBarTextColor : barTextColor.ToUIColor(); } } |