使用customView创建一个UIBarButtonItem就像Flexible-Space项一样

Tom*_*ift 14 uitoolbar uibarbuttonitem ios

我有一个UIBarButtonItemUITextField定义视图.工具栏包含此项目和几个按钮.

当工具栏调整大小(比如设备方向更改)时,我希望UITextField增长或缩小(宽度)以占用工具栏中的所有可用空间.

如果没有弄清楚工具栏中所有按钮的组合大小,然后UITextField适当地设置宽度,是否只有一些神奇的方法可以让这个项目像灵活空间条项目一样?

Ode*_*Dov 7

正如我在评论中所写,@ Krishna_K建议的解决方案始终不起作用.

自从我写了自己的方法,想到分享.它的一部分基于: 获取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;
Run Code Online (Sandbox Code Playgroud)

评论:

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

  • 请注意,传递给UIToolbar项目保留 -所以你应该总是从工具栏本身,而不是你的地方留成对象的物品栏工作.

  • 那个黑客攻击是唯一能够获得宽度的东西(尝试过宽度属性,经过一段时间的尝试后尝试添加视图,尝试让视图自行扩展).通常的黑客警告适用......

那就是人们......


Kri*_*a K 3

如果您设置UIViewAutoresizingFlexibleWidth为文本字段,它应该自动缩小或增大。

  • 这不会考虑其他按钮 - 即长标签将超出其合理范围...... (6认同)