调整 UIToolbar 的大小以适合其项目?

Posted

技术标签:

【中文标题】调整 UIToolbar 的大小以适合其项目?【英文标题】:Size a UIToolbar to fit its items? 【发布时间】:2011-02-09 16:11:16 【问题描述】:

我正在尝试找出一种简洁的方法来制作 UIToolbar 的宽度,使其仅适合它所包含的项目。有没有办法:

配置UIToolbar 以在其项目更改时自动调整其宽度? 以编程方式确定项目所需的最小宽度,然后可用于设置UIToolbar 的框架?

由于项目之间的间距以及 UIBarButtonItems 不是 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 的大小以适合其项目?的主要内容,如果未能解决你的问题,请参考以下文章

iOS - UIToolbar 从后台返回后调整大小

UIToolbar 的动画调整大小导致在 iOS <5.1 上剪切背景

UIImageView 显示图像时如何防止 UIToolbar 调整大小?

自定义 UIToolbar 用动画调整大小

使用UIToolbar调整UIView的大小不会同时调整大小

如何调整 CTabCtrl 的大小以适合其内容