Значки на панели инструментов iPad: кнопки кнопок не центрированы? - PullRequest
6 голосов
/ 02 октября 2010

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

ipad toolbar button images

Значок "пузыря чата" слева от известного Набор иконок глифов .Обратите внимание, что он имеет правильное вертикальное положение (посередине), но намного темнее, чем шкала серого, используемая для кнопки 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?Возможно от HIG?Можете ли вы предоставить источник?

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

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

Ответы [ 3 ]

1 голос
/ 02 октября 2010

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

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

0 голосов
/ 02 октября 2010

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

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

0 голосов
/ 02 октября 2010

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

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

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

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

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

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

...