我正在尝试获得UIBarButtonItem
的宽度。
这不起作用:
barbuttonitem.customView.frame.size.width
这也行不通:
barbuttonitem.width
答案 0 :(得分:53)
这个怎么样:
UIBarButtonItem *item = /*...*/;
UIView *view = [item valueForKey:@"view"];
CGFloat width = view? [view frame].size.width : (CGFloat)0.0;
答案 1 :(得分:4)
我遇到了同样的问题。经过多次尝试,我发现了一些有用的东西!
在我的特定情况下,我需要从导航控制器的工具栏中获取第一个UIBarButtonItem的宽度,但是您可以轻松地根据您的喜好调整它:
UIToolbar *toolbar = self.navigationController.toolbar; // or whatever toolbar you need
UIView *view = (UIView *)[toolbar.subviews objectAtIndex:0]; // 0 for the first item
double itemWidth = view.bounds.size.width;
请注意:我必须在viewDidLoad中使用此代码才能获得正确的值。在init中它返回0.0
亚瑟
答案 2 :(得分:0)
如果您对某个特定项目的宽度感兴趣,最简单的方法是使用两个IBOutlet:一个用于按钮,另一个用于相应的条形按钮项目。您将读取按钮宽度,而不是读取条形按钮项目宽度。
当然,如果您需要这种方法,这种方法将不起作用。将循环中的宽度相加。 (顺便说一句,第一个按钮从x = 12开始,两个按钮之间的距离是10,除非你做了一些棘手的事情。)当然,你可以有两个数组,但这只是麻烦。
答案 3 :(得分:0)
工具栏中总是有多个子视图。
除了arthurs的答案,你可以迭代它们并检查它的类型。
for sv in self.navigationController!.toolbar.subviews {
if sv.isKindOfClass(UIBarButtonItem.self){
let width = sv.bounds.width
}
}
答案 4 :(得分:0)
直接获取条形按钮项的宽度。
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image"] style:UIBarButtonItemStylePlain target:self action:@selector(action:)];
double width = barButtonSetting.image.size.width;