【问题标题】:Get the width of a UIBarButtonItem获取 UIBarButtonItem 的宽度
【发布时间】:2011-02-21 13:59:11
【问题描述】:

我正在尝试获取UIBarButtonItem 的宽度。

这不起作用:

barbuttonitem.customView.frame.size.width

这也行不通:

barbuttonitem.width

【问题讨论】:

    标签: iphone objective-c uibarbuttonitem


    【解决方案1】:

    这个呢:

    UIBarButtonItem *item = /*...*/;
    UIView *view = [item valueForKey:@"view"];
    CGFloat width = view? [view frame].size.width : (CGFloat)0.0;
    

    【讨论】:

    • 我会警惕这样做。这是访问该类的未记录属性。而且我不确定通过“valueForKey”这样做是否足以防止您被 App Store 拒绝。
    • @Ray Lillywhite:-valueForKey: 是一个记录在案的公共方法。 KVC API 提供了一种防止直接实例变量访问的方法,因此如果该值是可访问的,则不采取任何操作来禁止访问。一个问题可能是在未来版本的 iOS 中遇到未定义的值。为了解决这个问题,您可以将调用包装在 try 块中。此外,即使您认为无法在面向 App Store 的应用中使用此方法,但这并不意味着针对越狱设备的用户无法在其应用中使用此方法。
    • 有没有人使用这种技术提交了一个应用程序并获得了批准?我不明白为什么苹果会为此拒绝一个应用程序,但想看看是否有人经历过。
    【解决方案2】:

    我遇到了同样的问题。经过多次尝试,我发现了一些有效的方法!

    在我的具体情况下,我需要从导航控制器的工具栏中获取第一个 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 中使用此代码才能获得正确的值。在初始化中它返回 0.0

    亚瑟

    【讨论】:

      【解决方案3】:

      如果您对某个特定项目的宽度感兴趣,最简单的方法是拥有两个 IBOutlet:一个用于按钮,另一个用于相应的条形按钮项目。您将读取按钮宽度,而不是读取条形按钮项的宽度。

      当然,如果您愿意,这种方法将行不通,例如对循环中的宽度求和。 (顺便说一句,第一个按钮从 x=12 开始,两个按钮之间的距离是 10,除非你做一些棘手的事情。)当然,你可以有两个数组,但这只是很麻烦。

      【讨论】:

        【解决方案4】:

        工具栏中总是有多个子视图。

        除了 arthurs 的答案,您还可以遍历它们并检查它的类型。

        for sv in self.navigationController!.toolbar.subviews {
                if sv.isKindOfClass(UIBarButtonItem.self){
                    let width = sv.bounds.width
                }
            }
        

        【讨论】:

          【解决方案5】:

          直接获取条形按钮项的宽度。

          UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image"] style:UIBarButtonItemStylePlain target:self action:@selector(action:)];
          
          double width = barButtonSetting.image.size.width;
          

          【讨论】:

            猜你喜欢
            • 2012-01-28
            • 2012-06-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多