使用 shell 标题视图时,仅在 IOS 中标题视图下方会出现额外的填充空间。
TitleView 代码
<Shell.TitleView>
<Grid ColumnDefinitions="*,2*" Margin="0" Padding="0">
<Image x:Name="ecolabLogo" AutomationId="ecolabLogoId" Source="logo.png" HeightRequest="23" HorizontalOptions="Start" />
<Image x:Name="logOutImage" AutomationId="logOutImageId" Grid.Column="1" Source="logout.png" HeightRequest="26" HorizontalOptions="End" Margin="0,0,10,0" >
<Image.GestureRecognizers>
<TapGestureRecognizer NumberOfTapsRequired="1" Command="{Binding LogOutCommand}" />
</Image.GestureRecognizers>
</Image>
</Grid>
</Shell.TitleView>
有人可以给我解决方案来删除 shell 标题视图(IOS)下面的额外空格吗?
就像我们可以使用 iOSShellRenderer 来做到这一点,因为我尝试将内容页面的填充和边距(也是 -ve 边距)设置为 0,但它不起作用。
这是一个已知问题:登录到 Github 的 iOS #6735 上的 TitleView 下的下划线错误。
作为替代解决方法,您可以使用Handlers 删除 TitleView
下的行。以下代码供您参考:
CustomShellHandler.cs:
internal class CustomShellHandler : ShellRenderer
{
protected override IShellNavBarAppearanceTracker CreateNavBarAppearanceTracker()
=> new CustomShellNavBarAppearanceTracker(this, base.CreateNavBarAppearanceTracker());
}
CustomShellNavBarAppearanceTracker.cs:
internal class CustomShellNavBarAppearanceTracker : IShellNavBarAppearanceTracker
{
readonly IShellContext _context;
readonly IShellNavBarAppearanceTracker _baseTracker;
public CustomShellNavBarAppearanceTracker(IShellContext context, IShellNavBarAppearanceTracker baseTracker)
{
_context = context;
_baseTracker = baseTracker;
}
public void Dispose() => _baseTracker.Dispose();
public void ResetAppearance(UINavigationController controller) => _baseTracker.ResetAppearance(controller);
public void SetAppearance(UINavigationController controller, ShellAppearance appearance) {
var navBar = controller.NavigationBar;
var navigationBarAppearance = new UINavigationBarAppearance();
navigationBarAppearance.ConfigureWithTransparentBackground();
navigationBarAppearance.ShadowColor = UIColor.Clear;
navigationBarAppearance.BackgroundColor = UIColor.Clear;
navigationBarAppearance.BackgroundEffect = null;
navBar.ScrollEdgeAppearance = navBar.StandardAppearance = navigationBarAppearance;
}
public void SetHasShadow(UINavigationController controller, bool hasShadow) => _baseTracker.SetHasShadow(controller, hasShadow);
public void UpdateLayout(UINavigationController controller)=> _baseTracker.UpdateLayout(controller);
}
最后一步,在 MauiProgram.cs
中注册处理程序:
.ConfigureMauiHandlers(handlers =>
{
#if IOS
handlers.AddHandler<Shell, CustomShellHandler>();
#endif
}); ;