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

5
我正在想办法以一种简洁的方式使UIToolbar的宽度仅能够容纳其包含的项目。是否有以下两种方法之一:
  • 配置UIToolbar,使其在更改其项目时自动调整其宽度?
  • 编程确定所需最小宽度,然后将其用于设置UIToolbar的框架?
由于项目之间的间距和UIBarButtonItem不是UIView子类,我无法找到解决方法。
3个回答

2

在尝试了其他答案的建议后,发现除非使用自定义视图或者等待所有内容加载完成,否则这些方法无法生效。最终,我找到了一种根据工具栏项设置工具栏宽度的方法:

//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
@Dmitry,UIToolbar 继承自 UIView,而 UIView 确实有 subviews - Peter DeWeese
谢谢您的澄清。我还没有在11中测试过,但是您什么时候设置断点呢?如果您在视图完全可用之后再打断点,这仍然正确吗? - Peter DeWeese

0

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
    }
}

0

我刚刚查看了文档,似乎 UIBarButtonItems 虽然不是 UIView 的子类,但它们有一个 width 属性。虽然我自己没有尝试过,但我认为你可以将每个项目的宽度相加,包括可伸缩项,并获得工具栏的宽度。 希望能帮到你! ;)


4
我很确定如果没有明确设置,宽度为0。 - Bryan Irace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接