在 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。有什么问题欢迎提问!
此致
我是 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。有什么问题欢迎提问!
此致