Значок UIBarButtonItem белый при добавлении через IB, черный при программном добавлении - PullRequest
7 голосов
/ 08 августа 2010

Когда я добавляю значок к UIBarButtonItem через Interface Builder, значок отображается белым. Когда я добавляю тот же файл значков программно в другой UIToolbar, значок отображается черным. Почему?

UIImage *image = [UIImage imageNamed:@"icon.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:image forState:UIControlStateNormal];
rootViewController.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:reloadButton] autorelease];

Ответы [ 4 ]

6 голосов
/ 13 августа 2010

Все, что сказал Jongsma, правильно, вы должны использовать initWithImage: style: message.

Следующая проблема не в способе создания UIBarButtonItem, а в месте, где вы его назначаете. Вы создаете его с помощью UIBarButtonItemStylePlain, который обычно должен отображать контур значка в белом, но rightBarButtonItem для UINavigationItem (как и слева) не допускает UIBarButtonItemStylePlain. Он неявно преобразуется в UIBarButtonItemStyleBordered. В граничном стиле значок отображается «как есть», черный с небольшим градиентом.

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

6 голосов
/ 30 июня 2011

Ответ: Если вы хотите, чтобы он был белым, раскрасьте изображение в белый.

Детали:

UIBarButtonItems ведут себя немного по-разному в зависимости от того, как вы их используете.

При добавлении к UIToolbar:

initWithImage:style:target:action: создает «белые значки» (цвет изображения игнорируется, непрозрачные пиксели используются в качестве маски для создания белого изображения).
Это верно для стилей bordered и plain (но только для UIToolbar).

initWithCustomView: отображает обычное цветное изображение.

При добавлении к UINavigationItem:

initWithImage:style:target:action: создает цветные изображения и преобразует plain в bordered.

0 голосов
/ 26 марта 2013

Была такая же проблема. Я отметил, что вместо них использовались изображения @ 2X ...

0 голосов
/ 08 августа 2010

В вашем коде вы устанавливаете UIButton как подпредставление UIBarButtonItem. UIBarButtonItem уже является кнопкой, поэтому вам не следует добавлять другую кнопку в качестве подпредставления.

Попробуйте это:

UIImage *image = [UIImage imageNamed:@"icon.png"];
rootViewController.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithImage:image] autorelease];
...