获取 Xamarin.Forms 上 TabbedPage 的本机 iOS 系统选项卡栏图标
Posted
技术标签:
【中文标题】获取 Xamarin.Forms 上 TabbedPage 的本机 iOS 系统选项卡栏图标【英文标题】:Get native iOS system tab bar icons for TabbedPage on Xamarin.Forms 【发布时间】:2021-04-14 23:44:06 【问题描述】:我是 Xamarin.Forms 和 XAML 的新手。我正在尝试为我的 TabbedPage 中的不同页面仅显示 ios 的选项卡图标。我做了一些搜索,发现 UIKit 在 UITabBarSystem 上引用了 IOS 上可用的系统图标。我怎样才能利用该枚举中的元素而不必从互联网上获取这些图标? TabbedPage 是具有子页面的根,这些子页面是 ContentPages 和 ListView 页面。因此,正如您从所附示例中看到的那样,我希望 FavouritesPage 的“IconImageSource”属性能够从 iOS UIKit 获取图像。这可能吗?
<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:views="clr-namespace:PhoneApp.Views"
x:Class="PhoneApp.Views.MainPage">
<TabbedPage.Title>
</TabbedPage.Title>
<TabbedPage.Children>
<views:FavouritesPage Title="Favourites" IconImageSource=""/>
<views:RecentsPage Title="Recents"/>
<views:ContactsPage Title="Contacts"/>
<views:KeypadPage Title="Keypad"/>
<views:VoicemailPage Title="Voicemail"/>
</TabbedPage.Children>
</TabbedPage>
【问题讨论】:
【参考方案1】:我想我找到了适合您的解决方案。如果您想在 Xamarin 控件上使用本机 Api,您可以为它们使用自定义渲染器,这很棒!这是 TabedPage 的渲染器:
[assembly: ExportRenderer(typeof(MainPage), typeof(MyTabbedPageRenderer))]
namespace TestApp.iOS
public class MyTabbedPageRenderer : TabbedRenderer
public override void ViewWillAppear(bool animated)
base.ViewWillAppear(animated);
if (TabBar?.Items == null) return;
//Setting the Icons
TabBar.Items[0].Image = GetTabIcon(UITabBarSystemItem.Search);
TabBar.Items[1].Image = GetTabIcon(UITabBarSystemItem.Downloads);
TabBar.Items[2].Image = GetTabIcon(UITabBarSystemItem.Bookmarks);
private UIImage GetTabIcon(UITabBarSystemItem systemItem)
//Convert UITabBarItem to UIImage
UITabBarItem item = new UITabBarItem(systemItem, 0);
return UIImage.FromImage(item.SelectedImage.CGImage, item.SelectedImage.CurrentScale, item.SelectedImage.Orientation);
我为您创建了一个示例,您可以找到 here。如有任何问题,请追问!
问候
【讨论】:
以上是关于获取 Xamarin.Forms 上 TabbedPage 的本机 iOS 系统选项卡栏图标的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.Forms.Shell:如何获取底部 TabBar 高度?
在 iOS 上的 Xamarin.Forms.Maps 中使用 Xamarin.Essentials Geolocation 获取设备位置的奇怪问题