Tengo un UIButton
texto con "Explore la aplicación" y UIImage
(>) En Interface Builder
se ve así:
[ (>) Explore the app ]
Pero necesito colocar esto UIImage
DESPUÉS del texto:
[ Explore the app (>) ]
¿Cómo puedo mover UIImage
hacia la derecha?
ios
iphone
cocoa-touch
uibutton
imageedgeinsets
Pavel Yakimenko
fuente
fuente
Respuestas:
Mi solución a esto es bastante simple
fuente
En iOS 9 en adelante, parece que una forma sencilla de conseguirlo es forzar la semántica de la vista.
O programáticamente, usando:
fuente
semanticContentAttribute
nuestra lógica de diseño, en lugar de cambiarse asemanticContentAttribute
sí mismo. (cambio de enfoque semántico, no funcionará bien con la internacionalización)Configure
imageEdgeInset
ytitleEdgeInset
para mover los componentes dentro de su imagen. También puede crear un botón con esos gráficos de tamaño completo y usarlo como imagen de fondo para el botón (luego usarlotitleEdgeInsets
para mover el título).fuente
La respuesta de Raymond W. es la mejor aquí. Subclase UIButton con diseño personalizado Subvistas. Extremadamente simple de hacer, aquí hay una implementación de layoutSubviews que funcionó para mí:
fuente
¿Qué pasa con la subclasificación
UIButton
y la anulaciónlayoutSubviews
?Luego, posprocesando las ubicaciones de
self.imageView
&self.titleLabel
fuente
Otra forma simple (que NO es solo iOS 9) es subclase UIButton para anular estos dos métodos
contentEdgeInsets
ya se tiene en cuenta al usar super.fuente
Forzar "de derecha a izquierda" para el botón no es una opción si su aplicación admite tanto "de izquierda a derecha" como "de derecha a izquierda".
La solución que funcionó para mí es una subclase que se puede agregar al botón en el Storyboard y funciona bien con restricciones (probado en iOS 11):
Donde 'padding' sería el espacio entre el título y la imagen.
fuente
.forceRightToLeft
es una opción! Simplemente use el valor opuesto (.forceLeftToRight
) siUIApplication.shared.userInterfaceLayoutDirection == .rightToLeft
.En Swift:
fuente
Partiendo de la respuesta de @split ...
La respuesta es fantástica, pero ignora el hecho de que el botón puede tener insertos personalizados en el borde del título y la imagen que se configuran de antemano (por ejemplo, en el guión gráfico).
Por ejemplo, es posible que desee que la imagen tenga algo de relleno en la parte superior e inferior del contenedor, pero aún así mover la imagen al lado derecho del botón.
Amplié el concepto con este método: -
fuente
Esto crea un botón alineado a la derecha, así:
El botón no ajusta su ancho según el contexto, por lo que aparecerá un espacio a la izquierda de la etiqueta. Puede resolver esto calculando el ancho del marco del botón a partir de buttonLabelSize.width y buttonImageSize.width.
fuente
fuente
Esta solución funciona con iOS 7 y superior
Solo subclase UIButton
Uso (en algún lugar de tu clase):
fuente
Basándose en respuestas anteriores. Si desea tener un margen entre el icono y el título del botón, el código debe cambiar un poco para evitar que la etiqueta y el icono floten por encima de los límites de los botones de tamaño intrínseco.
La última línea de código es importante para el cálculo intrínsecamente del tamaño del contenido para el diseño automático.
fuente
Esta es mi propia forma de hacer las cosas (después de unos 10 años)
fuente
Solución de línea única en Swift:
fuente