You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为TabBar添加圆角效果及阴影

实现自定义凸起式底部TabBar方案

以下是针对你需求的几种可行实现思路,适配Xamarin/Xamarin.Forms/.NET MAUI场景:

  • 手动构建跨平台自定义TabBar
    放弃系统默认TabBar,用Grid+ContentView手动搭建底部导航栏:

    • 把Grid分成5列,中间列预留更大空间放置凸起按钮
    • 给中间按钮设置圆形背景、向上的Margin实现凸起效果,绑定点击事件跳转页面
    • 其他列放置图标+文本组合控件,通过绑定选中状态切换字体/图标颜色
  • Android平台原生定制
    基于系统TabLayout做扩展,通过自定义Renderer实现:

    1. 拦截TabBar的中间Tab,给它设置自定义View
    2. 通过TranslationY属性让自定义View向上偏移,形成凸起
    3. 单独处理中间按钮的点击逻辑,避免和系统Tab切换冲突
[assembly: ExportRenderer(typeof(CustomTabbedPage), typeof(CustomTabbedPageRenderer))]
namespace YourApp.Droid
{
    public class CustomTabbedPageRenderer : TabbedPageRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
        {
            base.OnElementChanged(e);
            if (ViewGroup?.GetChildAt(1) is TabLayout tabLayout)
            {
                var middleTab = tabLayout.GetTabAt(2); // 假设中间是第3个Tab索引
                if (middleTab != null)
                {
                    var customTabView = LayoutInflater.From(Context).Inflate(Resource.Layout.MiddleTab, null);
                    middleTab.SetCustomView(customTabView);
                    customTabView.TranslationY = -30; // 向上偏移30dp,按需调整
                    customTabView.Click += (s, args) => ((CustomTabbedPage)Element).NavigateToMiddlePage();
                }
            }
        }
    }
}
  • iOS平台原生定制
    自定义UITabBarController的Renderer,添加独立的凸起按钮:
    1. 在TabBar上方添加一个圆形UIButton,调整位置让它部分覆盖TabBar形成凸起
    2. 设置按钮的圆角、背景色和图标,绑定点击事件切换到目标页面
    3. 隐藏系统默认的中间TabItem,避免交互冲突
[assembly: ExportRenderer(typeof(CustomTabbedPage), typeof(CustomTabbedPageRenderer))]
namespace YourApp.iOS
{
    public class CustomTabbedPageRenderer : TabbedPageRenderer
    {
        private UIButton _middleButton;

        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            AddMiddleButton();
        }

        private void AddMiddleButton()
        {
            _middleButton = new UIButton(UIButtonType.Custom)
            {
                Frame = new CGRect(View.Bounds.Width / 2 - 35, View.Bounds.Height - 100, 70, 70),
                Layer = { CornerRadius = 35 },
                BackgroundColor = UIColor.SystemBlue
            };
            _middleButton.SetImage(UIImage.FromBundle("plus_icon"), UIControlState.Normal);
            _middleButton.AddTarget(this, new ObjCRuntime.Selector("OnMiddleButtonTap"), UIControlEvent.TouchUpInside);
            View.AddSubview(_middleButton);
        }

        [ObjCRuntime.Export("OnMiddleButtonTap")]
        private void OnMiddleButtonTap()
        {
            SelectedIndex = 2; // 切换到中间页面索引
        }
    }
}
  • MAUI Shell快速实现
    如果用.NET MAUI,可以直接在Shell的TabBar中给中间Tab设置自定义内容:
<TabBar>
    <Tab Title="首页" Icon="home">
        <ShellContent ContentTemplate="{DataTemplate views:HomePage}" />
    </Tab>
    <Tab Title="消息" Icon="message">
        <ShellContent ContentTemplate="{DataTemplate views:MessagePage}" />
    </Tab>
    <Tab>
        <ShellContent>
            <Button WidthRequest="70" HeightRequest="70"
                    CornerRadius="35" BackgroundColor="#007AFF"
                    ImageSource="plus"
                    Command="{Binding GoToAddPageCommand}" />
        </ShellContent>
    </Tab>
    <Tab Title="我的" Icon="profile">
        <ShellContent ContentTemplate="{DataTemplate views:ProfilePage}" />
    </Tab>
</TabBar>

内容的提问来源于stack exchange,提问作者diukin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:45:58