我正在尝试获取UIBarButtonItem的框架,它只是从UIBarItem / NSObject继承。
答案 0 :(得分:6)
在iOS 5.0,5.1和6.0中,使用以下方法。可以很容易地修改此方法以与UIToolBar一起使用。
- (UIControl *) findBarButtonItem:(UIBarButtonItem *)barButtonItem
{
UINavigationBar *toolbar = self.navigationController.navigationBar;
UIControl *button = nil;
for (UIView *subview in toolbar.subviews) {
if ([subview isKindOfClass:[UIControl class]]) {
for (id target in [(UIControl *)subview allTargets]) {
if (target == barButtonItem) {
button = (UIControl *)subview;
break;
}
}
if (button != nil) break;
}
}
return button;
}
用法:
UIControl *barButton = [self findBarButtonItem:myBarButtonItem];
CGRect barButtonFrame = barButton.frame;
答案 1 :(得分:6)
这种方式最适合我:
UIView *targetView = (UIView *)[yourBarButton performSelector:@selector(view)];
CGRect rect = targetView.frame;
答案 2 :(得分:5)
我知道您发布此问题是为了发布您找到的答案。我想我会添加一个替代解决方案,不会有未来iOS更新的风险。
如果您使用自定义视图创建UIBarButtonItem
,则可以访问customView
的{{1}}属性。 UIBarButtonItem
的{{1}}将反映其在工具栏或导航栏中的位置。
显然,此解决方案会阻止您使用标准系统定义的按钮。但您可以使用自己的图像轻松复制它们。
通常,您使用的自定义视图是带有适当图标图像的frame
。一个技巧是确保启用按钮的customView
属性,以便获得通常的高亮效果。
使用您在UIButton
上使用的相同目标/操作设置showsTouchWhenHighlighted
。
答案 3 :(得分:0)
这是一种无需诉诸无证行为或假设的方法。
使用带有自定义视图的UIBarButtonItem,而不是使用UIBarButtonSystemItem。您可以使用类似这样的技术从UIBarButtonSystemItem获取图像: