3

我正在尝试获取 UIBarButtonItem 的框架,它只是继承自 UIBarItem/NSObject。

4

4 回答 4

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;
于 2013-01-04T18:52:16.303 回答
6

这种方式最适合我:

UIView *targetView = (UIView *)[yourBarButton performSelector:@selector(view)];
CGRect rect = targetView.frame;
于 2013-08-20T21:00:07.337 回答
5

我知道您发布此问题是为了发布您找到的答案。我想我会添加一个替代解决方案,该解决方案没有在未来的 iOS 更新中中断的风险。

如果您UIBarButtonItem使用自定义视图创建您的,那么您可以customView访问UIBarButtonItem. 的framecustomView反映其在工具栏或导航栏中的位置。

显然,此解决方案会阻止您使用标准的系统定义按钮。但是您可以使用自己的图像轻松复制它们。

通常,您将使用的自定义视图将UIButton带有适当的图标图像。一个技巧是确保您启用按钮的showsTouchWhenHighlighted属性,以便获得通常的高亮效果。

使用UIButton您将在UIBarButtonItem.

于 2013-01-04T19:04:18.237 回答
0

这是一种无需求助于无证行为或假设的方法。

不要使用 UIBarButtonSystemItem,而是使用带有自定义视图的 UIBarButtonItem。您可以使用以下技术从 UIBarButtonSystemItem 获取图像:

在 UIButton 中使用 UIBarButtonItem 图标

于 2017-07-04T03:13:24.703 回答