Intenté cambiar el UIStackView
fondo de claro a blanco en el inspector de Storyboard, pero al simular, el color de fondo de la vista de pila todavía tiene un color claro.
¿Cómo puedo cambiar el color de fondo de a UIStackView
?
ios
swift
uistackview
LukasTong
fuente
fuente
Respuestas:
Referencia desde AQUÍ .
EDITAR:
Puede agregar una subvista
UIStackView
como se menciona AQUÍ o en esta respuesta (a continuación) y asignarle un color. Echa un vistazo a continuaciónextension
para eso:Y puedes usarlo como:
fuente
drawRect()
se llama. Simplemente puede probar subclasificandoUIStackView
if let backgroundView = self.subviews.first(where: {$0.tag == 123}) {
. Si es así, cambio el color de fondo de esa vista.Lo hago así:
Funciona de maravilla
fuente
@IBDesignable class StackView
Lo que le permitirá diseñar en Storyboard . No me importa mucho agregar un fondo en tiempo de ejecución, pero es muy difícil diseñar la vista de pila cuando no tiene color en elUIStackView
es un elemento que no se representa y, como tal, no se dibuja en la pantalla. Esto significa que cambiarbackgroundColor
esencialmente no hace nada. Si desea cambiar el color de fondo, simplemente agregue unUIView
como subvista (que no está organizado) como a continuación:fuente
Quizás la forma más fácil, más legible y menos hacky sería incrustar el
UIStackView
enUIView
y establecer el color de fondo a la vista.Y no olvide configurar correctamente las restricciones de diseño automático entre esas dos vistas ... ;-)
fuente
Pitiphong es correcto, para obtener una vista de pila con un color de fondo, haga algo como lo siguiente ...
Esto le dará una vista de pila cuyo contenido se colocará sobre un fondo rojo.
Para agregar relleno a la vista de pila para que los contenidos no estén alineados con los bordes, agregue lo siguiente en el código o en el guión gráfico ...
fuente
TL; DR: La forma oficial de hacerlo es agregando una vista vacía a la vista de pila usando el
addSubview:
método y estableciendo el fondo de la vista agregada.La explicación: UIStackView es una subclase especial de UIView que solo hace que el diseño no se dibuje. Muchas de sus propiedades no funcionarán como de costumbre. Y dado que UIStackView diseñará solo sus subvistas organizadas, esto significa que simplemente puede agregarle un UIView con
addSubview:
método, establecer sus restricciones y color de fondo. Esta es la forma oficial de lograr lo que quiere citado de la sesión de WWDCfuente
Esto funciona para mí en Swift 3 y iOS 10:
fuente
En iOS10, la respuesta de @ Arbitur necesita un setNeedsLayout después de configurar el color. Este es el cambio que se necesita:
fuente
backgroundColor
antes de agregarlo a unsuperview
funciona en ios10 y ios9, sin embargo, si actualizó elbackgroundColor
después delayoutSubviews()
que se llamara su función, simplemente no actualizaríabackgroundColor
elbackgroundLayer
significado de ninguna actualización visual. Solucionado ahora, gracias por señalarlo.Aquí hay una breve descripción general para agregar una vista de pila Color de fondo.
Crear vista de fondo con esquinas redondeadas
Para que aparezca como fondo, lo agregamos a la matriz de subvistas de la vista de pila raíz en el índice 0. Eso lo coloca detrás de las vistas organizadas de la vista de pila.
Agregue restricciones para anclar el backgroundView a los bordes de la vista de la pila, utilizando una pequeña extensión en UIView.
llamar al
pinBackground
deviewDidLoad
Referencia de: AQUÍ
fuente
Podrías hacer una pequeña extensión de
UIStackView
Uso:
fuente
Xamarin, versión C #:
fuente
fuente
Subclase UIStackView
Luego en tu clase
fuente
Puede insertar una subcapa en StackView, me funciona:
fuente
Soy un poco escéptico en Subclasificar los componentes de la interfaz de usuario. Así es como lo estoy usando,
Y este es el uso,
Nota: con este enfoque, si desea establecer el borde, debe establecerlo
layoutMargins
en stackView para que el borde sea visible.fuente
No puede agregar fondo a stackview. Pero lo que puede hacer es agregar stackview en una vista y luego establecer el fondo de vista, esto hará el trabajo. * No va a interrumpir los flujos de stackview. Espero que esto ayude.
fuente
Podemos tener una clase personalizada
StackView
como esta:Y se puede usar así:
Esto es un poco mejor que agregar una función de extensión
func addBackground(color: UIColor)
como lo sugieren otros. La vista de fondo es diferida, por lo que no se creará hasta que realmente llamestackView.backgroundView.backgroundColor = ...
. Y configurar / cambiar el color de fondo varias veces no resultará en múltiples subvistas insertadas en la vista de pila.fuente
Si desea controlar desde el propio diseñador, agregue esta extensión a la vista de pila
fuente
Podrías hacerlo así:
Al proporcionar una extensión para anular el
backgroundColor
:fuente
Prueba BoxView . Es similar a UIStackView, pero está renderizando y admite más opciones de diseño.
fuente