Como posso ajustar o tamanho da imagem do UIButton? Estou definindo a imagem assim:
[myLikesButton setImage:[UIImage imageNamed:@"icon-heart.png"] forState:UIControlStateNormal];
No entanto, isso preenche a imagem até o botão completo, como diminuo a imagem?
ios
objective-c
xcode
uibutton
adit
fonte
fonte
Respostas:
Se eu entendi corretamente o que você está tentando fazer, você precisa brincar com os botões inseridos na borda da imagem. Algo como:
fonte
A resposta de Tim está correta, no entanto, eu queria adicionar outra sugestão, porque no meu caso havia uma solução mais simples.
Eu estava procurando definir as
UIButton
inserções de imagem porque não sabia que poderia definir o modo de conteúdo nos botõesUIImageView
, o que teria impedido a necessidade de usar UIEdgeInsets e valores codificados por completo. Basta acessar a visualização de imagem subjacente no botão e definir o modo de conteúdo:Veja UIButton não escuta a configuração do modo de conteúdo?
Swift 3
fonte
button.backgroundImageView.contentMode
não funcionaSwift 3:
fonte
contentVerticalAlignment/contentHorizontalAlignment
opções me permitiram escalá-lo da maneira que eu esperava. Obrigado por postar isso.contentHorizontalAlignment
econtentVerticalAlignment
fez o truqueVocê também pode fazer isso a partir do inteface builder como este.
Eu acho que é útil.
fonte
Se sua imagem é muito grande (e você não pode / não quer apenas torná-la menor), uma combinação das duas primeiras respostas funciona muito bem.
A menos que você obtenha as inserções da imagem corretamente, a imagem será inclinada sem alterar o
contentMode
.fonte
você pode usar a
imageEdgeInsets
propriedade As margens interna ou externa do retângulo ao redor da imagem do botão.Um valor positivo diminui, ou insere, essa margem - em movimento. Um valor negativo expande ou ultrapassa essa margem.
fonte
Aqui está a outra solução para dimensionar o imageView do UIButton.
fonte
Aqui está a versão Swift:
fonte
Swift 4
Você precisaria usar essas duas linhas de código, nesta ordem específica. Tudo que você precisa é alterar o valor superior e inferior das inserções de arestas.
fonte
EXC_BAD_ACCESS
erro quando chamado deoverride func layoutSubviews()
.Com a ajuda da resposta de Tim C , consegui criar uma extensão ao
UIButton
usar o Swift que permite especificar o quadro da imagem usando a.setImage()
função com umframe
parâmetro extraUsando isso, se você quiser definir o quadro de um
UIButton
paraCGRectMake(0, 0, 64, 64)
e definir a imagem delemyImage
com um quadro deCGRectMake(8, 8, 48, 48)
, poderá usarfonte
if let
vez de verificar seframe
está,nil
e forçar a desembrulhar um zilhão de vezes .Ao alterar o tamanho do ícone
UIEdgeInsetsMake(top, left, bottom, right)
, lembre-se das dimensões do botão e da capacidade do UIEdgeInsetsMake de trabalhar com valores negativos como se fossem positivos.Exemplo: Dois botões com altura 100 e aspecto 1: 1.
Os exemplos 1 e 3 são idênticos, pois ABS (100 - (40 + 40)) = ABS (100 - (60 + 60))
fonte
Swift 3
Defino a largura e a altura do myButton para 40 e meu preenchimento no EdgeInsetsMake é 15 em todos os lados. Sugiro adicionar uma cor de fundo ao seu botão para ver o preenchimento real.
fonte
Uma abordagem é redimensionar a UIImage no código da seguinte maneira. Nota: esse código é dimensionado apenas pela altura, mas você também pode ajustar facilmente a função para dimensionar pela largura.
fonte
Atualizado para Swift> 5
defina o tamanho:
definir margens:
fonte
Atualizado para o Swift 3
fonte
Eu acho que o tamanho da sua imagem também é igual ao tamanho do botão, em seguida, você coloca a imagem no fundo do botão, como:
você tem o mesmo tamanho de imagem e botão. espero que você entenda meu ponto.
fonte