我有一个 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/