我正在尝试获取UIBarButtonItem的框架,它继承自UIBarItem/NSObject。
发布于 2013-01-05 02:52:16
在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;发布于 2013-08-21 05:00:07
这种方式最适合我:
UIView *targetView = (UIView *)[yourBarButton performSelector:@selector(view)];
CGRect rect = targetView.frame;发布于 2013-01-05 03:04:18
我知道你贴这个问题的目的是为了贴出你找到的答案。我想我应该添加一个替代的解决方案,这样就不会有在未来的iOS更新中中断的风险。
如果使用自定义视图创建UIBarButtonItem,则可以访问UIBarButtonItem的customView属性。customView的frame将反映其在工具栏或导航栏中的位置。
显然,此解决方案会阻止您使用系统定义的标准按钮。但是你可以很容易地用你自己的镜像复制它们。
通常,您将使用的自定义视图是带有适当图标图像的UIButton。其中一个技巧是确保启用按钮的showsTouchWhenHighlighted属性,以便获得通常的突出显示效果。
使用您将在UIBarButtonItem上使用的相同目标/操作设置UIButton。
https://stackoverflow.com/questions/14163099
复制相似问题