Значки панели инструментов iPad: изображения кнопок панели не центрированы?

Взгляните на следующий фрагмент скриншота из приложения для iPad, над которым я работаю:

изображения кнопок на панели инструментов iPad

Значок чата слева взят из знаменитого набора значков Glyphish. Обратите внимание, что он имеет правильное вертикальное положение (посередине), но он намного темнее, чем шкала серого, используемая для кнопки InfoDark. Код для создания этой иконки выглядит следующим образом:

UIImage* image = [UIImage imageNamed:@"02-chat.png"];
CGRect frame = CGRectMake(0, 0, image.size.width, image.size.height);
UIButton* button = [[UIButton alloc] initWithFrame:frame];
[button setBackgroundImage:image forState:UIControlStateNormal];
[button addTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside];
[button setShowsTouchWhenHighlighted:YES];
UIBarButtonItem* chatBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];

Значок «пузырь чата» в середине создан с использованием того же изображения, но с использованием другого кода. Обратите внимание, что у него правильная окраска/прозрачность, но неправильное вертикальное положение (слишком высоко):

UIImage* image = [UIImage imageNamed:@"02-chat.png"];
UIBarButtonItem* chatBarButtonItem = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:nil action:NULL];

Как получить кнопку UIBarButtonItem с правильным цветом/прозрачностью (чтобы мне не приходилось делать это вручную), а также с правильным вертикальным расположением?

Является ли одна или другая ошибка либо в моем коде, либо в коде Apple? Или оба? Или ни то, ни другое (т. е. «как задумано»)?

Изменить: ответы на ответы

Похоже, что первая версия использует изображение как маску, а не как обычное изображение.

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

Имейте в виду, что размещение объектов UIResponder (например, UIButton) внутри UIBarButtonItem дает непредсказуемые результаты, и я считаю, что лучше этого избегать.

У вас есть источник? (Особенно ссылка на Apple?) Никогда такого не слышал.

Измените дизайн изображения, чтобы оно было вашим собственным. Это лучший и единственный способ обеспечить правильный размер, градиенты и положение всех значков на панели инструментов.

Я не обязательно не согласен. Однако это ручной шаг, который я хочу исключить. Должна быть возможность получить желаемое поведение без необходимости редактирования. (Тем более, что я получаю обе половины желаемого поведения, используя существующие фреймворки. Просто не одновременно)

Лучше всего для панели инструментов 25x25 и 50x50@2x. Иногда вам может понадобиться снизиться до 23.

Это что-то официальное от Apple? Может из ГИА? Можете ли вы предоставить источник?

Вы можете попробовать установить на нем imageInsets, чтобы нажать его.

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


person Shaggy Frog    schedule 01.10.2010    source источник


Ответы (3)


Похоже, что первая версия использует изображение как маску, а не как обычное изображение. Имейте в виду, что размещение объектов UIResponder (например, UIButton) внутри UIBarButtonItem дает непредсказуемые результаты, и я считаю, что лучше этого избегать.

Заполнение во второй версии выглядит просто проблемой заполнения. Таким образом, вы можете либо изменить размер изображения, чтобы иметь дополнительный контент, сделав объект UIImage того же размера, что и другие кнопки (думаю, 24x24px?), либо вы можете использовать свойство imageInsets UIBarItem.

person Michael Nachbaur    schedule 01.10.2010

Измените дизайн изображения, чтобы оно было вашим собственным. Это лучший и единственный способ обеспечить правильный размер, градиенты и положение всех значков на панели инструментов. Лучше всего для панели инструментов 25x25 и 50x50@2x. Иногда вам может понадобиться снизиться до 23.

Другая вещь, которую вы можете сделать, это изменить вставки верхнего и нижнего изображения на 2 пикселя, чтобы получить желаемый результат. Если вы измените только 1 вставку, это сожмет изображение.

person jeffpa    schedule 01.10.2010

Вы можете попробовать установить на нем imageInsets, чтобы нажать его.

Просто создайте его как средний и установите так:

chatBarButtonItem.imageInsets = UIEdgeInsetsMake(2.0f, 0.0f, -2.0f, 0.0f);

Я постараюсь чуть позже рассмотреть этот конкретный случай поближе. Я не уверен, почему это будет делать это.

== РЕДАКТИРОВАТЬ ==

Похоже, у Майкла есть ответ на такое поведение.

person bjtitus    schedule 01.10.2010