调整 UIToolbar 的大小以适合其项目?
Posted
技术标签:
【中文标题】调整 UIToolbar 的大小以适合其项目?【英文标题】:Size a UIToolbar to fit its items? 【发布时间】:2011-02-09 16:11:16 【问题描述】:我正在尝试找出一种简洁的方法来制作 UIToolbar
的宽度,使其仅适合它所包含的项目。有没有办法:
UIToolbar
以在其项目更改时自动调整其宽度?
以编程方式确定项目所需的最小宽度,然后可用于设置UIToolbar
的框架?
由于项目之间的间距以及 UIBarButtonItem
s 不是 UIView
子类的事实,我无法弄清楚这一点。
【问题讨论】:
【参考方案1】:在尝试了其他答案的一些建议之后,除非我使用自定义视图,或者除非所有内容都已加载,否则我终于找到了一种根据其项目设置工具栏宽度的方法:
//Add bar items to toolbar first.
UIView* v = toolbar.subviews.lastObject;
float newWidth = v.frame.origin.x + v.frame.size.width;
//Set toolbar width
您需要覆盖 UIToolbar -setItems:
或以其他方式检测更改的按钮以自动调整大小。
我已在我的重构库es_ios_utils 中包含此功能,以使用多个按钮设置导航项的右侧项。在上述链接中,请参阅UIToolbar +toolbarWithItems:
和UINavigationItem -setRightBarButtonItems
。
【讨论】:
UIToolbar
上没有子视图。
@Dmitry, UIToolbar
继承自 UIView
,确实有 subviews
。
感谢您的澄清。 11我没测试过,但是你什么时候设置断点呢?如果在视图完全可用后中断,这仍然是真的吗?【参考方案2】:
我刚刚检查了文档,看起来像 UIBarButtonItems,即使它们不是 UIView 子类,它们也有一个属性width。我自己没有尝试过,但我认为您可以总结每个项目的宽度,包括灵活项目,并获得工具栏的宽度。 希望能帮助到你! ;)
【讨论】:
除非明确设置,否则我很确定宽度为 0。【参考方案3】:Swift 3、4 更新
我有一个带有 barButtonItem 的工具栏,该工具栏由图像启动。我需要做的就是计算图像的总宽度加上间隔(边距)。
默认情况下,边距宽度为 11。代码将是:
let width: CGFloat = YourBarButtonItemList.reduce(0) sofar, new in
if let image = new.image
return sofar + image.size.width + 11
else
return sofar + ADefaultValueIfThisDoesntWork + 11
【讨论】:
以上是关于调整 UIToolbar 的大小以适合其项目?的主要内容,如果未能解决你的问题,请参考以下文章
UIToolbar 的动画调整大小导致在 iOS <5.1 上剪切背景
UIImageView 显示图像时如何防止 UIToolbar 调整大小?