firstButton é um UIButton do tipo Custom. Estou colocando programaticamente três deles em cada célula de uma tabela, assim:
[firstButton setImage:markImage forState:UIControlStateNormal];
[firstButton setContentMode:UIViewContentModeScaleAspectFit];
[cell.contentView addSubview:firstButton];
Em outro lugar, estou dizendo ao clipToBounds. O que obtenho é um recorte do quadrado central da imagem, ao invés de uma renderização em escala de aspecto dele. Eu tentei fazer isso de várias maneiras, incluindo definir a propriedade mode em firstButton.imageView, que também não parece funcionar.
ios
uibutton
contentmode
Dan Ray
fonte
fonte
Respostas:
Eu tive o mesmo problema. Vejo que esta pergunta é um pouco antiga, mas quero fornecer uma resposta clara e correta para poupar outras pessoas (como eu) algum tempo quando ela aparecer nos resultados da pesquisa.
Levei um pouco de pesquisa e experimentação, mas encontrei a solução. Basta definir o ContentMode do ImageView "oculto" que está dentro do UIButton.
Talvez seja a isso que Dan Ray estava aludindo em sua resposta aceita, mas suspeito que não.
fonte
Se você estiver lidando com a imagem do UIButton (ao contrário de seu backgroundImage), definir o contentMode no próprio UIButton ou em seu imageView não tem efeito (apesar do que outras respostas dizem).
Alternativamente, faça o seguinte:
Ou dimensione sua imagem de acordo.
OU apenas use um UIImageView (que respeite adequadamente o contentMode) com um UITapGestureRecognizer anexado a ele ou um UIButton transparente em cima dele.
fonte
contentMode
noimageView
se você quiser fazer qualquer tipo de preenchimento aspecto ou ajuste, como outras respostas esclareceram. Consulte: stackoverflow.com/a/7944316/746890 .Em vez de definir a
contentMode
no próprio botão, você vai querer definircontentHorizontalAlignment
econtentVerticalAlignment
propriedades e (crucialmente) ocontentMode
para o botão deimageView
para qualquer tipo de preenchimento aspecto ou forma. Aqui está um exemplo:Claro, você também pode fazer outras coisas como alinhar a imagem do botão à parte superior do botão. Se você não precisa de um preenchimento de aspecto ou ajuste, pode apenas definir o alinhamento:
No Swift, você vai querer usar:
Isso funciona para todas as versões do iOS, incluindo as versões mais recentes com layout automático (ou seja, iOS 4 até iOS 11+).
fonte
Depois de algumas horas de confusão, veja como fiz para funcionar no iOS 3.2. Como dusker mencionou, usar setBackgroundImage em vez de setImage fez o trabalho para mim.
fonte
A resposta é usar um UIImageView com todas as lindas configurações de Content Mode que você deseja e, em seguida, colocar um botão personalizado em cima dele. Idiota que você não pode fazer tudo de uma vez, mas parece que não pode.
fonte
Encontrou uma solução para isso. Defina a
adjustsImageWhenHighlighted
propriedade deUIButton
comoNO
.Espero que isto ajude. Sinta-se à vontade para comentar abaixo, responderei em quaisquer dúvidas que você tenha.
fonte
Minha resposta é semelhante à de Kuba. Eu precisava que minha imagem fosse configurada de maneira programática.
fonte
Única solução que funcionou para mim:
fonte
Swift 3
fonte
Em vez de setImage, tente setBackgroundImage
fonte
Acredito que temos um problema simples com o construtor de interface aqui - aparentemente, o IB ignora qualquer alteração no modo de conteúdo DEPOIS de você definir a propriedade da imagem.
a solução é tão simples: definir o modo de conteúdo, remover nomes de imagem previamente definidos (certifique-se de removê-lo em todos os estados, padrão, destacado, etc.) e, em seguida, inserir novamente os nomes de imagem desejados em todos os estados desejados - et voilà .
fonte
Também aconselho dar uma olhada na
adjustsImageWhenHighlighted
UIButton
propriedade para evitar estranhas deformações da imagem, quando o botão é pressionado.fonte
Ao tentar descobrir isso, meu método ficou um pouco mais hackeado com o passar do tempo, e acabei criando uma subclasse de UIButton e substituindo setHighlighted:
Para mim, funciona apenas para reduzir o alfa da imagem para 0,5, porque eles estão em um fundo preto.
No entanto, só funciona se eu comentar [super setHighlighted:] (onde parece que o código esticado de imagem está acontecendo), o que simplesmente não parece a maneira certa de resolver isso ... tudo parece ser funcionando bem, no entanto. Veremos como funciona à medida que continuo trabalhando nisso.
fonte
Se alguém procura uma resposta que funcione no iOS 6 e iOS 7 e storyboard:
Você pode definir a imagem em seu storyboard:
E depois:
fonte
Se o UIButton parece não escutar as configurações de restrição de layout, verifique se as imagens são maiores que o tamanho do botão. Sempre use as imagens @ 2x e @ 3x para resoluções de retina.
fonte
Essas duas coisas (que são bastante difíceis de encontrar inicialmente) irão esticar sua imagem UIButton para caber no tamanho do botão:
deve-se sempre tentar definir isso no Storyboard em vez de no código.
fonte