如何更改 Shell 标签栏高度
How to change Shell Tabbar height
我的问题:
我将 Shell 与底部 Tabbar
一起使用,我只是想在 Android 和 iOS 上更改它的高度。
我的搜索结果:
我知道 Tabbar
是一个 Android/iOS 具有固定指定高度的内置功能。
似乎有一种方法可以使用“Custom-Renderer”来实现。我用这种方法找到的所有项目都不适用于我的 visual studio(>100 个错误或什么都不做)。
我很难相信我需要超过 100 行代码才能“仅”调整高度。有人可以提供一个可行的解决方案来更改 Shell 标签栏(底部标签)高度吗?
编辑
不幸的是,您需要在每个平台项目上创建自定义渲染器:
Android
MyShellRenderer
class
[assembly: ExportRenderer(typeof(App.AppShell), typeof(App.Droid.MyShellRenderer))]
namespace App.Droid
{
public class MyShellRenderer : ShellRenderer
{
public MyShellRenderer(Context context) : base(context)
{
}
protected override IShellBottomNavViewAppearanceTracker CreateBottomNavViewAppearanceTracker(ShellItem shellItem)
{
return new MyBottomNavViewAppearanceTracker(this, shellItem);
}
}
}
MyBottomNavViewAppearanceTracker
class
class MyBottomNavViewAppearanceTracker : ShellBottomNavViewAppearanceTracker
{
public MyBottomNavViewAppearanceTracker(IShellContext shellContext, ShellItem shellItem) : base(shellContext, shellItem)
{
}
public override void SetAppearance(BottomNavigationView bottomView, IShellAppearanceElement appearance)
{
bottomView.LayoutParameters.Height = 400;
base.SetAppearance(bottomView, appearance);
}
}
编辑:
iOS
MyShellRenderer
class
[assembly: ExportRenderer(typeof(App.AppShell), typeof(App.iOS.MyShellRenderer))]
namespace App.iOS
{
public class MyShellRenderer : ShellRenderer
{
protected override IShellTabBarAppearanceTracker CreateTabBarAppearanceTracker()
{
return new MyCreateTabBarAppearanceTracker();
}
}
}
CreateTabBarAppearanceTracker
class
class CreateTabBarAppearanceTracker : ShellTabBarAppearanceTracker
{
public override void SetAppearance(UITabBarController controller, ShellAppearance appearance)
{
UITabBar tabBar = controller.TabBar;
int tabBarHeight = 100;
if (tabBar.Frame.Height != tabBarHeight)
{
tabBar.Frame = new CGRect(tabBar.Frame.X, tabBar.Frame.Y + (tabBar.Frame.Height - tabBarHeight), tabBar.Frame.Width, tabBarHeight);
}
}
}
额外内容
您可能遗漏了一些可以解释异常大量错误的命名空间。
could not be found are you missing a using directive or an assembly reference
通常人们不会在答案中包含命名空间(using
语句),因为大多数时候命名空间是显而易见的,并且很容易被 visual studio 智能感知处理。
只需将光标放在或悬停在带红色下划线的语句上,就会出现一个小工具提示
然后单击“显示潜在修复”或键盘快捷键之一,select 适当的修复(通常是建议列表的第一个),在这种情况下,intelisense 将自动添加所需的命名空间。
我发现的每个代码示例都排除了 using 指令。就我而言,我需要以下 3 个我无法找到的。感谢@Cfun 的回答,上面的代码可以添加:
using Google.Android.Material.BottomNavigation;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
我的问题:
我将 Shell 与底部 Tabbar
一起使用,我只是想在 Android 和 iOS 上更改它的高度。
我的搜索结果:
我知道 Tabbar
是一个 Android/iOS 具有固定指定高度的内置功能。
似乎有一种方法可以使用“Custom-Renderer”来实现。我用这种方法找到的所有项目都不适用于我的 visual studio(>100 个错误或什么都不做)。
我很难相信我需要超过 100 行代码才能“仅”调整高度。有人可以提供一个可行的解决方案来更改 Shell 标签栏(底部标签)高度吗?
编辑
不幸的是,您需要在每个平台项目上创建自定义渲染器:
Android
MyShellRenderer
class
[assembly: ExportRenderer(typeof(App.AppShell), typeof(App.Droid.MyShellRenderer))]
namespace App.Droid
{
public class MyShellRenderer : ShellRenderer
{
public MyShellRenderer(Context context) : base(context)
{
}
protected override IShellBottomNavViewAppearanceTracker CreateBottomNavViewAppearanceTracker(ShellItem shellItem)
{
return new MyBottomNavViewAppearanceTracker(this, shellItem);
}
}
}
MyBottomNavViewAppearanceTracker
class
class MyBottomNavViewAppearanceTracker : ShellBottomNavViewAppearanceTracker
{
public MyBottomNavViewAppearanceTracker(IShellContext shellContext, ShellItem shellItem) : base(shellContext, shellItem)
{
}
public override void SetAppearance(BottomNavigationView bottomView, IShellAppearanceElement appearance)
{
bottomView.LayoutParameters.Height = 400;
base.SetAppearance(bottomView, appearance);
}
}
编辑:
iOS
MyShellRenderer
class
[assembly: ExportRenderer(typeof(App.AppShell), typeof(App.iOS.MyShellRenderer))]
namespace App.iOS
{
public class MyShellRenderer : ShellRenderer
{
protected override IShellTabBarAppearanceTracker CreateTabBarAppearanceTracker()
{
return new MyCreateTabBarAppearanceTracker();
}
}
}
CreateTabBarAppearanceTracker
class
class CreateTabBarAppearanceTracker : ShellTabBarAppearanceTracker
{
public override void SetAppearance(UITabBarController controller, ShellAppearance appearance)
{
UITabBar tabBar = controller.TabBar;
int tabBarHeight = 100;
if (tabBar.Frame.Height != tabBarHeight)
{
tabBar.Frame = new CGRect(tabBar.Frame.X, tabBar.Frame.Y + (tabBar.Frame.Height - tabBarHeight), tabBar.Frame.Width, tabBarHeight);
}
}
}
额外内容
您可能遗漏了一些可以解释异常大量错误的命名空间。
could not be found are you missing a using directive or an assembly reference
通常人们不会在答案中包含命名空间(using
语句),因为大多数时候命名空间是显而易见的,并且很容易被 visual studio 智能感知处理。
只需将光标放在或悬停在带红色下划线的语句上,就会出现一个小工具提示
然后单击“显示潜在修复”或键盘快捷键之一,select 适当的修复(通常是建议列表的第一个),在这种情况下,intelisense 将自动添加所需的命名空间。
我发现的每个代码示例都排除了 using 指令。就我而言,我需要以下 3 个我无法找到的。感谢@Cfun 的回答,上面的代码可以添加:
using Google.Android.Material.BottomNavigation;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;