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

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

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

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

【问题讨论】:

    标签: objective-c cocoa-touch uikit uitoolbar


    【解决方案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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-04-06
      • 2018-09-16
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 2021-07-20
      相关资源
      最近更新 更多