2010-09-11 2 views
9

У меня есть UIViewController настроить для отображения инфо-кнопки справа в ее UINavigationItem так:rightBarButtonItem кнопки Информации, нет места для правых

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

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

Infobutton

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

Спасибо.

+0

Он выглядит правильно расположенным для меня. Посмотрите на другие приложения для iPhone, которые помещают кнопку в правой части навигационной панели: сообщения, календарь, контакты, карты и т. Д. И т. Д. Все они расположены одинаково. –

+1

Мой клиент хочет, чтобы он был дальше, и этот интервал не выглядит хорошо с помощью информационной кнопки. – Emil

+0

Я использую ту же кнопку на навигационной панели, но слева, а не справа, используя интервал по умолчанию. Мне это хорошо. Если ваш клиент хочет, чтобы он выдавал больше, спросите, почему они хотят, чтобы их приложение выглядело совершенно иначе, чем все другие приложения, которые используют кнопку информации в навигационной панели. –

ответ

14

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

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

Я не уверен, что он работает для кнопок «системы», но может.

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

EDIT: Предположительно, панель инструментов вызывает [customView sizeThatFits:blah], чтобы узнать, насколько большой вид «хочет быть». Вышеупомянутый код должен означать «добавить 10-пиксельную вставку с правым краем», которая для обычной (настраиваемой) кнопки также увеличивает размер на 10 пикселей.

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

+0

Ха, это сработало! Я понятия не имею, почему, но это сработало. Позаботьтесь об этом мне? – Emil

+3

EDIT: этот код не сделал все это, я должен был добавить это: \t 'infoButton.contentEdgeInsets = (UIEdgeInsets) {. Left = -10};' также, или кнопка просто будет сжиматься справа. – Emil

Смежные вопросы