Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -177,17 +177,33 @@ void OnPagePropertyChanged(object sender, PropertyChangedEventArgs e)
{
// Setting TabBarItem.Title in iOS 10 causes rendering bugs
// Work around this by creating a new UITabBarItem on each change
if (e.PropertyName == Page.IconImageSourceProperty.PropertyName || e.PropertyName == Page.TitleProperty.PropertyName)
if (e.PropertyName == Page.IconImageSourceProperty.PropertyName ||
e.PropertyName == Page.TitleProperty.PropertyName ||
e.PropertyName == TabbedPageConfiguration.AutoResizeIconsProperty.PropertyName)
{
var page = (Page)sender;
UpdateTabBarItem((Page)sender);
}
}

public override void TraitCollectionDidChange(UITraitCollection previousTraitCollection)
{
if (previousTraitCollection.VerticalSizeClass == TraitCollection.VerticalSizeClass)
return;

if (Element is not null && TabbedPageConfiguration.GetAutoResizeIcons(Element))
{
UpdateTabBarItems();
}
}

IPlatformViewHandler renderer = page.ToHandler(_mauiContext);
void UpdateTabBarItem(Page page)
{
IPlatformViewHandler renderer = page.ToHandler(_mauiContext);

if (renderer?.ViewController.TabBarItem == null)
return;
if (renderer?.ViewController.TabBarItem == null)
return;

SetTabBarItem(renderer);
}
SetTabBarItem(renderer);
}

void OnPagesChanged(object sender, NotifyCollectionChangedEventArgs e)
Expand Down Expand Up @@ -239,7 +255,8 @@ void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
UpdatePageSpecifics();
else if (e.PropertyName == TabbedPageConfiguration.TranslucencyModeProperty.PropertyName)
UpdateBarTranslucent();

else if (e.PropertyName == TabbedPageConfiguration.AutoResizeIconsProperty.PropertyName)
UpdateTabBarItems();
}

public override UIViewController ChildViewControllerForStatusBarHidden()
Expand Down Expand Up @@ -448,6 +465,14 @@ void UpdateBarTranslucent()
}
}

void UpdateTabBarItems()
{
foreach (var page in Tabbed.InternalChildren)
{
UpdateTabBarItem((Page)page);
}
}

void UpdateChildrenOrderIndex(UIViewController[] viewControllers)
{
if (Tabbed is not TabbedPage tabbed)
Expand Down Expand Up @@ -480,11 +505,28 @@ async void SetTabBarItem(IPlatformViewHandler renderer)
throw new InvalidCastException($"{nameof(renderer)} must be a {nameof(Page)} renderer.");

var icons = await GetIcon(page);
renderer.ViewController.TabBarItem = new UITabBarItem(page.Title, icons?.Item1, icons?.Item2)
if (TabbedPageConfiguration.GetAutoResizeIcons(Element))
{
var resizedImage = TabbedViewExtensions.AutoResizeTabBarImage(TraitCollection, icons?.Item1);
var resizedSelectedImage = TabbedViewExtensions.AutoResizeTabBarImage(TraitCollection,icons?.Item2);
SetTabBarItem(resizedImage, resizedSelectedImage);
resizedImage?.Dispose();
resizedSelectedImage?.Dispose();
}
else
{
SetTabBarItem(icons?.Item1, icons?.Item2);
}

void SetTabBarItem(UIImage image, UIImage selectedImage)
{
Tag = Tabbed?.Children.IndexOf(page) ?? -1,
AccessibilityIdentifier = page.AutomationId
};
renderer.ViewController.TabBarItem = new UITabBarItem(page.Title, image, selectedImage)
{
Tag = Tabbed?.Children.IndexOf(page) ?? -1,
AccessibilityIdentifier = page.AutomationId
};
}

icons?.Item1?.Dispose();
icons?.Item2?.Dispose();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,26 @@ public static IPlatformElementConfiguration<iOS, FormsElement> SetTranslucencyMo
SetTranslucencyMode(config.Element, value);
return config;
}

public static readonly BindableProperty AutoResizeIconsProperty =
BindableProperty.Create("AutoResizeIcons",
typeof(bool), typeof(TabbedPage), false);

public static bool GetAutoResizeIcons(BindableObject element)
=> (bool)element.GetValue(AutoResizeIconsProperty);

public static void SetAutoResizeIcons(BindableObject element, bool value)
=> element.SetValue(AutoResizeIconsProperty, value);

public static bool GetAutoResizeIcons(
this IPlatformElementConfiguration<iOS, FormsElement> config)
=> GetAutoResizeIcons(config.Element);

public static IPlatformElementConfiguration<iOS, FormsElement> SetAutoResizeIcons(
this IPlatformElementConfiguration<iOS, FormsElement> config, bool value)
{
SetAutoResizeIcons(config.Element, value);
return config;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -225,4 +225,9 @@ Microsoft.Maui.Controls.SearchBar.ReturnType.set -> void
override Microsoft.Maui.Controls.ListStringTypeConverter.CanConvertFrom(System.ComponentModel.ITypeDescriptorContext? context, System.Type! sourceType) -> bool
override Microsoft.Maui.Controls.ListStringTypeConverter.CanConvertTo(System.ComponentModel.ITypeDescriptorContext? context, System.Type? destinationType) -> bool
override Microsoft.Maui.Controls.ListStringTypeConverter.ConvertFrom(System.ComponentModel.ITypeDescriptorContext? context, System.Globalization.CultureInfo? culture, object! value) -> object?
override Microsoft.Maui.Controls.ListStringTypeConverter.ConvertTo(System.ComponentModel.ITypeDescriptorContext? context, System.Globalization.CultureInfo? culture, object? value, System.Type! destinationType) -> object?
override Microsoft.Maui.Controls.ListStringTypeConverter.ConvertTo(System.ComponentModel.ITypeDescriptorContext? context, System.Globalization.CultureInfo? culture, object? value, System.Type! destinationType) -> object?
~static readonly Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.AutoResizeIconsProperty -> Microsoft.Maui.Controls.BindableProperty
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.GetAutoResizeIcons(Microsoft.Maui.Controls.BindableObject element) -> bool
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.GetAutoResizeIcons(this Microsoft.Maui.Controls.IPlatformElementConfiguration<Microsoft.Maui.Controls.PlatformConfiguration.iOS, Microsoft.Maui.Controls.TabbedPage> config) -> bool
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.SetAutoResizeIcons(Microsoft.Maui.Controls.BindableObject element, bool value) -> void
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.SetAutoResizeIcons(this Microsoft.Maui.Controls.IPlatformElementConfiguration<Microsoft.Maui.Controls.PlatformConfiguration.iOS, Microsoft.Maui.Controls.TabbedPage> config, bool value) -> Microsoft.Maui.Controls.IPlatformElementConfiguration<Microsoft.Maui.Controls.PlatformConfiguration.iOS, Microsoft.Maui.Controls.TabbedPage>
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ Microsoft.Maui.Controls.HybridWebView.SetInvokeJavaScriptTarget<T>(T! target) ->
~Microsoft.Maui.Controls.Xaml.IXamlTypeResolver.Resolve(string qualifiedTypeName, System.IServiceProvider serviceProvider = null, bool expandToExtension = true) -> System.Type
~Microsoft.Maui.Controls.Xaml.RequireServiceAttribute.RequireServiceAttribute(System.Type[] serviceTypes) -> void
~Microsoft.Maui.Controls.Xaml.RequireServiceAttribute.ServiceTypes.get -> System.Type[]
~override Microsoft.Maui.Controls.Handlers.Compatibility.TabbedRenderer.TraitCollectionDidChange(UIKit.UITraitCollection previousTraitCollection) -> void
~override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.CreateDelegator() -> UIKit.UICollectionViewDelegateFlowLayout
~override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.CreateItemsViewSource() -> Microsoft.Maui.Controls.Handlers.Items.IItemsViewSource
~override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.DetermineCellReuseId(Foundation.NSIndexPath indexPath) -> string
Expand Down Expand Up @@ -427,3 +428,8 @@ override Microsoft.Maui.Controls.ListStringTypeConverter.ConvertFrom(System.Comp
override Microsoft.Maui.Controls.ListStringTypeConverter.ConvertTo(System.ComponentModel.ITypeDescriptorContext? context, System.Globalization.CultureInfo? culture, object? value, System.Type! destinationType) -> object?
*REMOVED*static Microsoft.Maui.Controls.Platform.FormattedStringExtensions.ToNSAttributedString(this Microsoft.Maui.Controls.FormattedString! formattedString, Microsoft.Maui.IFontManager! fontManager, double defaultLineHeight = 0, Microsoft.Maui.TextAlignment defaultHorizontalAlignment = Microsoft.Maui.TextAlignment.Start, Microsoft.Maui.Font? defaultFont = null, Microsoft.Maui.Graphics.Color? defaultColor = null, Microsoft.Maui.TextTransform defaultTextTransform = Microsoft.Maui.TextTransform.Default) -> Foundation.NSAttributedString!
*REMOVED*static Microsoft.Maui.Controls.Platform.FormattedStringExtensions.ToNSAttributedString(this Microsoft.Maui.Controls.Span! span, Microsoft.Maui.IFontManager! fontManager, double defaultLineHeight = 0, Microsoft.Maui.TextAlignment defaultHorizontalAlignment = Microsoft.Maui.TextAlignment.Start, Microsoft.Maui.Font? defaultFont = null, Microsoft.Maui.Graphics.Color? defaultColor = null, Microsoft.Maui.TextTransform defaultTextTransform = Microsoft.Maui.TextTransform.Default) -> Foundation.NSAttributedString!
~static readonly Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.AutoResizeIconsProperty -> Microsoft.Maui.Controls.BindableProperty
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.GetAutoResizeIcons(Microsoft.Maui.Controls.BindableObject element) -> bool
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.GetAutoResizeIcons(this Microsoft.Maui.Controls.IPlatformElementConfiguration<Microsoft.Maui.Controls.PlatformConfiguration.iOS, Microsoft.Maui.Controls.TabbedPage> config) -> bool
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.SetAutoResizeIcons(Microsoft.Maui.Controls.BindableObject element, bool value) -> void
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.SetAutoResizeIcons(this Microsoft.Maui.Controls.IPlatformElementConfiguration<Microsoft.Maui.Controls.PlatformConfiguration.iOS, Microsoft.Maui.Controls.TabbedPage> config, bool value) -> Microsoft.Maui.Controls.IPlatformElementConfiguration<Microsoft.Maui.Controls.PlatformConfiguration.iOS, Microsoft.Maui.Controls.TabbedPage>
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ Microsoft.Maui.Controls.HybridWebView.SetInvokeJavaScriptTarget<T>(T! target) ->
~Microsoft.Maui.Controls.Xaml.IXamlTypeResolver.Resolve(string qualifiedTypeName, System.IServiceProvider serviceProvider = null, bool expandToExtension = true) -> System.Type
~Microsoft.Maui.Controls.WebViewProcessTerminatedEventArgs.PlatformArgs.get -> Microsoft.Maui.Controls.PlatformWebViewProcessTerminatedEventArgs
~Microsoft.Maui.Controls.Xaml.RequireServiceAttribute.RequireServiceAttribute(System.Type[] serviceTypes) -> void
~override Microsoft.Maui.Controls.Handlers.Compatibility.TabbedRenderer.TraitCollectionDidChange(UIKit.UITraitCollection previousTraitCollection) -> void
~Microsoft.Maui.Controls.Xaml.RequireServiceAttribute.ServiceTypes.get -> System.Type[]
~override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.CreateDelegator() -> UIKit.UICollectionViewDelegateFlowLayout
~override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.CreateItemsViewSource() -> Microsoft.Maui.Controls.Handlers.Items.IItemsViewSource
Expand Down Expand Up @@ -426,4 +427,9 @@ override Microsoft.Maui.Controls.ListStringTypeConverter.CanConvertTo(System.Com
override Microsoft.Maui.Controls.ListStringTypeConverter.ConvertFrom(System.ComponentModel.ITypeDescriptorContext? context, System.Globalization.CultureInfo? culture, object! value) -> object?
override Microsoft.Maui.Controls.ListStringTypeConverter.ConvertTo(System.ComponentModel.ITypeDescriptorContext? context, System.Globalization.CultureInfo? culture, object? value, System.Type! destinationType) -> object?
*REMOVED*static Microsoft.Maui.Controls.Platform.FormattedStringExtensions.ToNSAttributedString(this Microsoft.Maui.Controls.FormattedString! formattedString, Microsoft.Maui.IFontManager! fontManager, double defaultLineHeight = 0, Microsoft.Maui.TextAlignment defaultHorizontalAlignment = Microsoft.Maui.TextAlignment.Start, Microsoft.Maui.Font? defaultFont = null, Microsoft.Maui.Graphics.Color? defaultColor = null, Microsoft.Maui.TextTransform defaultTextTransform = Microsoft.Maui.TextTransform.Default) -> Foundation.NSAttributedString!
*REMOVED*static Microsoft.Maui.Controls.Platform.FormattedStringExtensions.ToNSAttributedString(this Microsoft.Maui.Controls.Span! span, Microsoft.Maui.IFontManager! fontManager, double defaultLineHeight = 0, Microsoft.Maui.TextAlignment defaultHorizontalAlignment = Microsoft.Maui.TextAlignment.Start, Microsoft.Maui.Font? defaultFont = null, Microsoft.Maui.Graphics.Color? defaultColor = null, Microsoft.Maui.TextTransform defaultTextTransform = Microsoft.Maui.TextTransform.Default) -> Foundation.NSAttributedString!
*REMOVED*static Microsoft.Maui.Controls.Platform.FormattedStringExtensions.ToNSAttributedString(this Microsoft.Maui.Controls.Span! span, Microsoft.Maui.IFontManager! fontManager, double defaultLineHeight = 0, Microsoft.Maui.TextAlignment defaultHorizontalAlignment = Microsoft.Maui.TextAlignment.Start, Microsoft.Maui.Font? defaultFont = null, Microsoft.Maui.Graphics.Color? defaultColor = null, Microsoft.Maui.TextTransform defaultTextTransform = Microsoft.Maui.TextTransform.Default) -> Foundation.NSAttributedString!
~static readonly Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.AutoResizeIconsProperty -> Microsoft.Maui.Controls.BindableProperty
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.GetAutoResizeIcons(Microsoft.Maui.Controls.BindableObject element) -> bool
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.GetAutoResizeIcons(this Microsoft.Maui.Controls.IPlatformElementConfiguration<Microsoft.Maui.Controls.PlatformConfiguration.iOS, Microsoft.Maui.Controls.TabbedPage> config) -> bool
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.SetAutoResizeIcons(Microsoft.Maui.Controls.BindableObject element, bool value) -> void
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.SetAutoResizeIcons(this Microsoft.Maui.Controls.IPlatformElementConfiguration<Microsoft.Maui.Controls.PlatformConfiguration.iOS, Microsoft.Maui.Controls.TabbedPage> config, bool value) -> Microsoft.Maui.Controls.IPlatformElementConfiguration<Microsoft.Maui.Controls.PlatformConfiguration.iOS, Microsoft.Maui.Controls.TabbedPage>
Original file line number Diff line number Diff line change
Expand Up @@ -218,4 +218,9 @@ Microsoft.Maui.Controls.SearchBar.ReturnType.set -> void
override Microsoft.Maui.Controls.ListStringTypeConverter.CanConvertFrom(System.ComponentModel.ITypeDescriptorContext? context, System.Type! sourceType) -> bool
override Microsoft.Maui.Controls.ListStringTypeConverter.CanConvertTo(System.ComponentModel.ITypeDescriptorContext? context, System.Type? destinationType) -> bool
override Microsoft.Maui.Controls.ListStringTypeConverter.ConvertFrom(System.ComponentModel.ITypeDescriptorContext? context, System.Globalization.CultureInfo? culture, object! value) -> object?
override Microsoft.Maui.Controls.ListStringTypeConverter.ConvertTo(System.ComponentModel.ITypeDescriptorContext? context, System.Globalization.CultureInfo? culture, object? value, System.Type! destinationType) -> object?
override Microsoft.Maui.Controls.ListStringTypeConverter.ConvertTo(System.ComponentModel.ITypeDescriptorContext? context, System.Globalization.CultureInfo? culture, object? value, System.Type! destinationType) -> object?
~static readonly Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.AutoResizeIconsProperty -> Microsoft.Maui.Controls.BindableProperty
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.GetAutoResizeIcons(Microsoft.Maui.Controls.BindableObject element) -> bool
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.GetAutoResizeIcons(this Microsoft.Maui.Controls.IPlatformElementConfiguration<Microsoft.Maui.Controls.PlatformConfiguration.iOS, Microsoft.Maui.Controls.TabbedPage> config) -> bool
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.SetAutoResizeIcons(Microsoft.Maui.Controls.BindableObject element, bool value) -> void
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.SetAutoResizeIcons(this Microsoft.Maui.Controls.IPlatformElementConfiguration<Microsoft.Maui.Controls.PlatformConfiguration.iOS, Microsoft.Maui.Controls.TabbedPage> config, bool value) -> Microsoft.Maui.Controls.IPlatformElementConfiguration<Microsoft.Maui.Controls.PlatformConfiguration.iOS, Microsoft.Maui.Controls.TabbedPage>
Original file line number Diff line number Diff line change
Expand Up @@ -228,4 +228,9 @@ override Microsoft.Maui.Controls.ListStringTypeConverter.CanConvertTo(System.Com
override Microsoft.Maui.Controls.ListStringTypeConverter.ConvertFrom(System.ComponentModel.ITypeDescriptorContext? context, System.Globalization.CultureInfo? culture, object! value) -> object?
override Microsoft.Maui.Controls.ListStringTypeConverter.ConvertTo(System.ComponentModel.ITypeDescriptorContext? context, System.Globalization.CultureInfo? culture, object? value, System.Type! destinationType) -> object?
*REMOVED*static Microsoft.Maui.Controls.Platform.FormattedStringExtensions.ToRunAndColorsTuples(this Microsoft.Maui.Controls.FormattedString! formattedString, Microsoft.Maui.IFontManager! fontManager, double defaultLineHeight = 0, Microsoft.Maui.TextAlignment defaultHorizontalAlignment = Microsoft.Maui.TextAlignment.Start, Microsoft.Maui.Font? defaultFont = null, Microsoft.Maui.Graphics.Color? defaultColor = null, Microsoft.Maui.TextTransform defaultTextTransform = Microsoft.Maui.TextTransform.Default) -> System.Collections.Generic.IEnumerable<System.Tuple<Microsoft.UI.Xaml.Documents.Run!, Microsoft.Maui.Graphics.Color!, Microsoft.Maui.Graphics.Color!>!>!
*REMOVED*static Microsoft.Maui.Controls.Platform.FormattedStringExtensions.UpdateInlines(this Microsoft.UI.Xaml.Controls.TextBlock! textBlock, Microsoft.Maui.IFontManager! fontManager, Microsoft.Maui.Controls.FormattedString! formattedString, double defaultLineHeight = 0, Microsoft.Maui.TextAlignment defaultHorizontalAlignment = Microsoft.Maui.TextAlignment.Start, Microsoft.Maui.Font? defaultFont = null, Microsoft.Maui.Graphics.Color? defaultColor = null, Microsoft.Maui.TextTransform defaultTextTransform = Microsoft.Maui.TextTransform.Default) -> void
*REMOVED*static Microsoft.Maui.Controls.Platform.FormattedStringExtensions.UpdateInlines(this Microsoft.UI.Xaml.Controls.TextBlock! textBlock, Microsoft.Maui.IFontManager! fontManager, Microsoft.Maui.Controls.FormattedString! formattedString, double defaultLineHeight = 0, Microsoft.Maui.TextAlignment defaultHorizontalAlignment = Microsoft.Maui.TextAlignment.Start, Microsoft.Maui.Font? defaultFont = null, Microsoft.Maui.Graphics.Color? defaultColor = null, Microsoft.Maui.TextTransform defaultTextTransform = Microsoft.Maui.TextTransform.Default) -> void
~static readonly Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.AutoResizeIconsProperty -> Microsoft.Maui.Controls.BindableProperty
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.GetAutoResizeIcons(Microsoft.Maui.Controls.BindableObject element) -> bool
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.GetAutoResizeIcons(this Microsoft.Maui.Controls.IPlatformElementConfiguration<Microsoft.Maui.Controls.PlatformConfiguration.iOS, Microsoft.Maui.Controls.TabbedPage> config) -> bool
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.SetAutoResizeIcons(Microsoft.Maui.Controls.BindableObject element, bool value) -> void
~static Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific.TabbedPage.SetAutoResizeIcons(this Microsoft.Maui.Controls.IPlatformElementConfiguration<Microsoft.Maui.Controls.PlatformConfiguration.iOS, Microsoft.Maui.Controls.TabbedPage> config, bool value) -> Microsoft.Maui.Controls.IPlatformElementConfiguration<Microsoft.Maui.Controls.PlatformConfiguration.iOS, Microsoft.Maui.Controls.TabbedPage>
Loading