Получить ширину UIBarButtonItem - PullRequest
16 голосов
/ 21 февраля 2011

Я пытаюсь получить ширину UIBarButtonItem.

Это не работает:

barbuttonitem.customView.frame.size.width

И это тоже не будет работать:

barbuttonitem.width

Ответы [ 5 ]

53 голосов
/ 21 февраля 2011

Что по этому поводу:

UIBarButtonItem *item = /*...*/;
UIView *view = [item valueForKey:@"view"];
CGFloat width = view? [view frame].size.width : (CGFloat)0.0;
4 голосов
/ 31 марта 2011

У меня была такая же проблема. После многих попыток я нашел то, что сработало!

В моем конкретном случае мне нужно было получить ширину первого 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

Arthur

0 голосов
/ 26 июня 2018

Получить непосредственно ширину в элементе кнопки панели.

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

double width = barButtonSetting.image.size.width;
0 голосов
/ 10 августа 2016

На панели инструментов всегда есть несколько подпредставлений.

В дополнение к ответу arthurs вы можете перебирать их и проверять его тип.

for sv in self.navigationController!.toolbar.subviews {
        if sv.isKindOfClass(UIBarButtonItem.self){
            let width = sv.bounds.width
        }
    }
0 голосов
/ 27 ноября 2011

Если вас интересует ширина для одного конкретного элемента, самый простой способ - это иметь два IBOutlets: один для кнопки, а другой для соответствующего элемента панели кнопок. Вместо того, чтобы читать ширину элемента панели кнопок, вы будете читать ширину кнопки.

Этот подход, конечно, не будет работать, если вы хотите, например, суммировать ширину в цикле. (Кстати, первая кнопка начинается с x = 12, а расстояние между двумя кнопками равно 10, если вы не делаете что-то хитрое.) Конечно, вы можете иметь два массива, но это просто громоздко.

...