首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取UIBarButtonItem的帧?

如何获取UIBarButtonItem的帧?
EN

Stack Overflow用户
提问于 2013-01-05 02:52:16
回答 4查看 7.2K关注 0票数 3

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-05 02:52:16

在iOS 5.0、5.1和6.0中,使用以下方法。这种方法也可以很容易地修改,以便与UIToolBar一起使用。

代码语言:javascript
复制
- (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;
}

用法:

代码语言:javascript
复制
UIControl *barButton = [self findBarButtonItem:myBarButtonItem];
CGRect barButtonFrame = barButton.frame;
票数 6
EN

Stack Overflow用户

发布于 2013-08-21 05:00:07

这种方式最适合我:

代码语言:javascript
复制
UIView *targetView = (UIView *)[yourBarButton performSelector:@selector(view)];
CGRect rect = targetView.frame;
票数 6
EN

Stack Overflow用户

发布于 2013-01-05 03:04:18

我知道你贴这个问题的目的是为了贴出你找到的答案。我想我应该添加一个替代的解决方案,这样就不会有在未来的iOS更新中中断的风险。

如果使用自定义视图创建UIBarButtonItem,则可以访问UIBarButtonItemcustomView属性。customViewframe将反映其在工具栏或导航栏中的位置。

显然,此解决方案会阻止您使用系统定义的标准按钮。但是你可以很容易地用你自己的镜像复制它们。

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

使用您将在UIBarButtonItem上使用的相同目标/操作设置UIButton

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14163099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档