Tenho um UIButton
com o texto "Explorar o aplicativo" e UIImage
(>) Interface Builder
nele se parece com:
[ (>) Explore the app ]
Mas preciso colocar isso UIImage
DEPOIS do texto:
[ Explore the app (>) ]
Como posso mover o UIImage
para a direita?
ios
iphone
cocoa-touch
uibutton
imageedgeinsets
Pavel Yakimenko
fonte
fonte
Respostas:
Minha solução para isso é bastante simples
fonte
No iOS 9 em diante, parece que uma maneira simples de conseguir isso é forçar a semântica da visualização.
Ou programaticamente, usando:
fonte
semanticContentAttribute
em nossa lógica de layout, em vez de mudar asemanticContentAttribute
si mesmo. (mudar a abordagem semântica, não funcionará bem com internacionalização)Defina o
imageEdgeInset
etitleEdgeInset
para mover os componentes dentro de sua imagem. Você também pode criar um botão usando os gráficos em tamanho real e usá-los como imagem de fundo para o botão (depois usartitleEdgeInsets
para mover o título).fonte
A resposta de Raymond W é melhor aqui. Subclasse UIButton com layoutSubviews customizados. Extremamente simples de fazer, aqui está uma implementação de layoutSubviews que funcionou para mim:
fonte
E quanto a subclassificação
UIButton
e substituiçãolayoutSubviews
?Em seguida, o pós-processamento dos locais de
self.imageView
&self.titleLabel
fonte
Outra maneira simples (que NÃO é apenas iOS 9) é criar uma subclasse de UIButton para substituir esses dois métodos
contentEdgeInsets
já é levado em consideração usando super.fonte
Forçar 'da direita para a esquerda' para o botão não é uma opção se o seu aplicativo suportar 'da esquerda para a direita' e 'da direita para a esquerda'.
A solução que funcionou para mim é uma subclasse que pode ser adicionada ao botão no Storyboard e funciona bem com restrições (testado no iOS 11):
Onde 'padding' seria o espaço entre o título e a imagem.
fonte
.forceRightToLeft
é uma opção! Basta usar o valor oposto (.forceLeftToRight
) seUIApplication.shared.userInterfaceLayoutDirection == .rightToLeft
.Em Swift:
fonte
Construindo a resposta por @split ...
A resposta é fantástica, mas ignora o fato de que o botão pode ter uma imagem personalizada e inserções de borda de título que são definidas de antemão (por exemplo, no storyboard).
Por exemplo, você pode querer que a imagem tenha algum preenchimento nas partes superior e inferior do contêiner, mas ainda assim mova a imagem para o lado direito do botão.
Eu estendi o conceito com este método: -
fonte
Isso cria um botão alinhado à direita, assim:
O botão não ajusta sua largura de acordo com o contexto, então um espaço aparecerá à esquerda do rótulo. Você pode resolver isso calculando a largura do quadro do botão em buttonLabelSize.width e em buttonImageSize.width.
fonte
fonte
Esta solução funciona com iOS 7 e superior
Apenas subclasse UIButton
Uso (em algum lugar da sua classe):
fonte
Com base nas respostas anteriores. Se você quiser ter uma margem entre o ícone e o título do botão, o código deve mudar um pouco para evitar a flutuação do rótulo e do ícone acima dos limites dos botões de tamanho intrínseco.
A última linha de código é importante para o cálculo do tamanho do conteúdo intrinsecamente para o layout automático.
fonte
Aqui está minha própria maneira de fazer as coisas, (após cerca de 10 anos)
fonte
Solução de linha única em Swift:
fonte