Pergunta

Na minha barra de navegação, tenho alguns bancos de direita que possuem ícones personalizados (as imagens do ícone são brancas, que funcionaram bem com o esquema de cores básico do iOS 6).

Sob iOS 7, carregando as imagens usando initwithtitle (consulte o snippet 1) substitui a cor "branca" no ícone pela tonalidade global adequada (uma cor específica de azul escuro neste caso)

Snippet de código 1:

UIBarButtonItem *refreshButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:(UIBarButtonItemStyle) UIBarButtonSystemItemCancel target:(self) action:@selector(refreshList)];

refreshButton.image = [UIImage imageNamed:@"RefreshIcon.png"];

No entanto, eu precisava usar o initwithcustomview para superar uma estranha mudança de comportamento que estava fazendo com que os ícones se afastem da vista. A idéia básica era definir especificamente o tamanho dos ícones. O initWithCustomview resolveu o problema de dimensionamento, mas não exibe as imagens do botão com o tom global, elas são exibidas na cor da imagem (branca). O código Snippet 2 mostra como estou criando o botão com initwithcustomview.

Snippet de código 2:

CGRect frameCustomButton2 = CGRectMake(0.0, 0.0, 18.0, 18.0);
UIButton *customButton2 = [[UIButton alloc] initWithFrame:frameCustomButton2];
[customButton2 setBackgroundImage:iconRefreshButton forState:UIControlStateNormal];
UIBarButtonItem *barCustomButton2 =[[UIBarButtonItem alloc] initWithCustomView:customButton2 ];
barCustomButton2.image = iconRefreshButton;
[customButton2 addTarget:self action:@selector(refreshList) forControlEvents:UIControlEventTouchUpInside];

É claro que todo esse código está no ViewDidload (void). Eu tentei coisas como:

barCustomButton2.tintColor = [UIColor blackColor];  //doesn't work

ou [Barbuttonappearância SettintColor: [Uicolor BlackColor]]; // não funciona

E eles não substituem a cor branca da imagem. É quase como se a criação da visualização personalizada ocorresse depois que a exibição olhar para a cor global de tonalidade?

Como posso garantir que o ícone do botão assuma a tonalidade global?

Obrigado!

Foi útil?

Solução

Só queria colocar isso em um comentário de raiz para dar melhor contexto à marca de seleção "Resposta" e dar uma melhor formatação.

Consegui descobrir este! Você pode dizer que a imagem sempre renderiza como modelo, o que a forçará a assumir a cor global de tonalidade.

UIImage *iconRefreshButton = [UIImage imageNamed:@"MyIconFilename.png"];
iconRefreshButton = [iconRefreshButton imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

O padrão, se você não o definir, é "uiimagerendingingmodeautomatom", o que significa que ele será renderizado como um modelo ou imagem original com base no contexto.

Outras dicas

Você terá que contornar o problema que estava tendo com o primeiro snippet de código ou terá que criar uma subclasse UIBUITTON que usa sua imagem como uma máscara para mostrar a cor da tonalidade em drawRect:.

Eu recomendaria a primeira abordagem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top