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
相关产品推荐
相关产品推荐

