ios - 使带有 customView 的 UIBarButtonItem 表现得像 Flexible-Space item

标签 ios uibarbuttonitem uitoolbar

我有一个 UIBarButtonItem,它有一个 UITextField 作为它的 customView。工具栏包含此项和一些按钮。

随着工具栏大小的调整(比如设备方向的改变),我希望 UITextField 增大或缩小(宽度)以占据工具栏中的所有可用空间。

如果没有计算出工具栏中所有按钮的组合大小,然后适本地设置 UITextField 宽度,是否有一些神奇的方法可以让这个项目表现得像一个灵活的空间栏项目?

最佳答案

正如我在评论中所写,@Krishna_K 建议的解决方案并非始终有效。

既然自己写了方法,就想到分享。 其中一部分基于: Get the width of a UIBarButtonItem

// Expand the status label to fill remaining space
CGFloat totalItemsWidth = 0.0;
CGFloat itemsMargin     = 8.0;
for (UIBarButtonItem *barButtonItem in myToolbar.items) {
    if (barButtonItem != self.myLabelItem) {
        // Get width of bar button item (hack from other SO question)
        UIView *view = [barButtonItem valueForKey:@"view"];
        CGFloat width = view? [view frame].size.width : (CGFloat)0.0;

        totalItemsWidth += width + itemsMargin;
    }
}

self.myLabelItem.width = (myToolbar.frame.size.width - totalItemsWidth) - itemsMargin;

评论:

  • 无法解释为什么这适用于灵活空间,但确实如此

  • 请注意,传递给 UIToolbar 的项目是复制而不是保留 - 因此您应该始终从工具栏本身处理栏项目,而不是本地保留对象.

  • 那里的 hack 是唯一可以获取宽度的方法(尝试了 width 属性,在延迟一段时间后尝试添加 View ,尝试让 View 自行扩展)。通常的黑客警告适用...

就是这样,伙计们...

关于ios - 使带有 customView 的 UIBarButtonItem 表现得像 Flexible-Space item,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8773607/

相关文章:

ios - 错误的 iOS8 状态栏?

ios - SkyFloatingLabelTextField 自动将标签向上移动到焦点上

ios - 设置导航栏返回按钮图片

objective-c - 如何向 UIBarButtonItem 添加图像?

ios - 有什么方法可以让 UIToolbar 始终位于设备的物理顶部,无论方向如何?

ios - 在 Storyboard 中指定 UIToolbar 的高度

ios - 不要将 Realm 对象映射到 Realm 表中

ios - 如何从子类的 uitableview 推送 uiviewcontroller

ios - Swift 正确对齐以编程方式创建的 UIBarButtonItem

iphone - iOS5.1设置UIToolbar背景图片