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

时间:2011-02-09 16:11:16

标签: objective-c cocoa-touch uikit uitoolbar

我正试图找出一种干净的方法,使UIToolbar的宽度尽可能宽,以适应它所包含的项目。有没有办法:

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

由于项目之间的间距以及UIBarButtonItem s不是UIView子类的事实,我无法弄清楚这一点。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我刚检查了文档并且看起来像UIBarButtonItems,即使它们不是UIView子类,它们也有一个属性width。我没有亲自尝试,但我认为你可以对每个项目的宽度求和,包括灵活项目,并获得工具栏的宽度。 希望能帮助到你! ;)

答案 2 :(得分: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
    }
}