在 Xamarin.Forms 上获取 TabbedPage 的原生 iOS 系统标签栏图标

Get native iOS system tab bar icons for TabbedPage on Xamarin.Forms

我是 Xamarin.Forms 和 XAML 的新手。我正在尝试让选项卡图标仅显示 IOS 用于我的 TabbedPage 中的不同页面。我做了一些搜索,我知道 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>

我想我找到了适合您的解决方案。如果您想在 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。有什么问题欢迎提问!

此致