Взгляните на следующий фрагмент скриншота из приложения для 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, чтобы нажать его.
Это также излишне ручной процесс. Хуже всего то, что это нужно настраивать вручную для каждого изображения, и если изображение каким-либо образом изменяется, его нужно перепроверять. Слишком много работы. Я хочу просто установить его на изображение и позволить базовой структуре решить, как центрировать изображение.