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

Xamarin中如何编程移除Toolbar的BarButtonItem并让剩余按钮居中

Xamarin中如何编程移除Toolbar的BarButtonItem并让剩余按钮居中

嘿,我完全懂你的困扰!你现在的做法只是把tag=14的按钮“视觉上隐藏”了,但它其实还留在Toolbar的Items集合里,那些flexible space还是会把它当成一个存在的元素来分配布局空间,所以剩下的loc1按钮自然没法真正居中。

解决这个问题的核心是直接从Toolbar的Items集合里移除这个按钮,而不是仅仅修改它的隐藏状态、宽度这些属性。这样Toolbar的布局系统会自动重新计算剩余元素的位置,让剩下的按钮自动居中。

给你具体的代码示例(假设你的Toolbar是UIToolbar类型,变量名为bottomToolbar):

// 先找到要移除的那个BarButtonItem
var targetItem = bottomToolbar.Items.FirstOrDefault(item => item.Tag == 14);

if (targetItem != null)
{
    // 生成一个移除了目标项的新数组
    var updatedItems = bottomToolbar.Items.Where(item => item != targetItem).ToArray();
    // 更新Toolbar的Items,设置animated:true还能有平滑的过渡效果
    bottomToolbar.SetItems(updatedItems, animated: true);
}

这样操作之后,那个tag=14的按钮就彻底从Toolbar的布局队列里消失了,剩下的flexible space会自动调整,把loc1按钮推到中间位置,完全符合你的需求。

另外如果你之后需要把这个按钮加回来,可以提前保存它的引用,比如在页面初始化的时候就把这个按钮存起来:

// 全局变量保存按钮引用
private UIBarButtonItem _loc2Button;

// 在页面初始化或Toolbar加载完成后
_loc2Button = bottomToolbar.Items.FirstOrDefault(item => item.Tag == 14);

之后要恢复的时候,就可以把它插回Items集合的合适位置:

var currentItems = bottomToolbar.Items.ToList();
// 比如插在loc1按钮(tag=1)的后面,保持原来的布局逻辑
var insertPosition = currentItems.FindIndex(item => item.Tag == 1) + 1;
currentItems.Insert(insertPosition, _loc2Button);
bottomToolbar.SetItems(currentItems.ToArray(), animated: true);

总结一下,你之前的方式只是“藏起来”,但布局系统还认这个元素;而直接移除的话,布局系统会重新计算空间分配,剩下的按钮自然就居中了~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 09:59:32