кнопка информации rightBarButtonItem, без пробела справа - PullRequest
9 голосов
/ 11 сентября 2010

У меня есть UIViewController, настроенный на отображение информационной кнопки справа в UINavigationItem, например:

UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight];
[infoButton addTarget:self action:@selector(toggleAboutView) forControlEvents:UIControlEventTouchUpInside]; 
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:infoButton] autorelease];

Это прекрасно работает, но единственная проблема заключается в том, что у меня осталось мало или совсем свободного места справа от кнопки, что выглядит довольно некрасиво:

Infobutton

Есть ли способ, чтобы кнопка сместилась примерно на 5 пикселей вправо?

Спасибо.

Ответы [ 2 ]

17 голосов
/ 28 сентября 2010
infoButton.contentEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 10);
14 голосов
/ 12 сентября 2010

Попробуйте установить infoButton.contentEdgeInsets (или imageEdgeInsets);что-то вроде

infoButton.contentEdgeInsets = (UIEdgeInsets){.right=10};

Я не уверен, работает ли он для "системных" кнопок, но это может быть.

Если это не сработает, возможно, самый простой способ - это вставить еговнутри UIView.

РЕДАКТИРОВАТЬ: Предположительно, панель инструментов вызывает [customView sizeThatFits:blah], чтобы выяснить, насколько большой вид "хочет быть".Вышеприведенный код должен означать «добавить 10-пиксельную правую вставку», что для обычной (пользовательской) кнопки также увеличивает размер на 10 пикселей.

Похоже, что UIButton возвращает фиксированный размер длястандартная кнопка информации, игнорируя любые вставки.Ваш код «работает», воздействуя на методы contentRectForBounds: и imageRectForContentRect:, которые изменяют место рисования значка, но фактически не изменяют размер кнопки.Я подозреваю, что значок отображается за пределами кнопки, что может означать, что «сенсорный» прямоугольник неправильный (но панели инструментов, кажется, увеличивают сенсорные поля для обычных UIBarButtonItems, поэтому, возможно, это не имеет значения).

...