Esta es mi configuración: tengo un UIScrollView
con borde de prueba superior, superior establecido en 0. Dentro de esto agrego un UIStackView
con estas restricciones:
stackView.centerYAnchor.constraintEqualToAnchor(selectedContactsScrollView.centerYAnchor).active = true
stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor).active = true
Dentro de la vista de pila agrego algunas vistas.
Mi problema es que, debido a las restricciones, la primera vista agregada a la vista de pila también tendrá borde de ataque = 0.
¿De qué maneras podría agregar algo de relleno a la primera vista? Sin ajustar las restricciones de la vista de desplazamiento.
ios
swift
uiscrollview
uistackview
Adrian
fuente
fuente
Respuestas:
La solución que ha proporcionado no agrega un relleno para sus vistas dentro de su UIStackView (como quería en la pregunta), pero agrega una ventaja para UIStackView.
Una solución podría ser agregar otro UIStackView dentro de su UIStackView original y dar el liderazgo a este nuevo UIStackVIew. Luego, agregue sus puntos de vista a este nuevo UIStackView.
Sugerencia, puede hacerlo completamente usando Interface Builder. En otras palabras, no es necesario escribir código para ello.
fuente
Cuando la
isLayoutMarginsRelativeArrangement
propiedad es verdadera, la vista de pila distribuirá sus vistas organizadas en relación con sus márgenes de diseño.Pero afecta a todas las vistas organizadas dentro de la vista de pila. Si desea este relleno para una sola vista organizada, debe usar anidado
UIStackView
fuente
isLayoutMarginsRelativeArrangement
es un getter, setter eslayoutMarginsRelativeArrangement
. No puedo editar la respuestalayoutMarginsRelativeArrangement
en su lugar. Documentación oficial: developer.apple.com/reference/uikit/uistackview/…stackView.layoutMargins = UIEdgeInsetsMake(0, 20, 0, 20); [stackView setLayoutMarginsRelativeArrangement:YES];
He descubierto que las restricciones no funcionan dentro de una Vista de pila, o parecen algo extrañas.
(Por ejemplo, si agrego la restricción de inicio / finalización a la seleccionada en la vista de pila de imágenes, eso también agrega la inicialización a la vista de colección, pero no agrega el final; y seguramente será un conflicto).
Para establecer márgenes de diseño para todas las vistas dentro de la vista de pila, seleccione:
Stack View > Size Inspector > Layout Margins > Fixed
Nota: la
"Fixed"
opción se llamaba anteriormente"Explicit"
, como se ve en las capturas de pantalla.Luego agrega tu relleno:
fuente
Lo que funcionó para mí es agregar a la vista de pila otra UIView que es solo un espaciador (funciona al menos con stackView.distribution = .Fill):
fuente
Swift 3: solo necesita establecer el desplazamiento mediante:
Asegúrese de que esta restricción se establezca después de usted
parentView.addArrangdSubView(firstView)
fuente
Si solo necesita relleno inicial, puede establecer la Alineación de la vista de pila en "Trailing" y luego podrá especificar restricciones iniciales únicas en cada una de sus subvistas contenidas.
Como beneficio adicional, también puede establecer la alineación de la vista de la pila en "Centro" y luego puede usar las restricciones iniciales y / o finales para dar a cada elemento su propio relleno en ambos lados.
fuente
Esta pregunta ya tiene buenas respuestas. Sin embargo, una sugerencia es usar la
spacing
propiedad para establecer el espacio entre las vistas. Para la primera y la última vista, puede haber dos opciones: establecer inserciones como @tolpp sugirió o agregar restricciones adjuntas al padre (stackview) con constante para agregar relleno.fuente
Lo que hicimos fue agregar componentes transparentes (por ejemplo, UIButton / UIView) como el primer y último hijo de UIStackView. Luego establezca restringir el ancho de estos niños invisibles para ajustar el relleno.
fuente
La solución sería tener una vista regular en la vista de la pila para contener las vistas a las que desee agregar restricciones, y luego puede agregar restricciones para sus elementos que sean relativas a las vistas en la vista de la pila. De esa manera, sus vistas originales pueden tener restricciones iniciales y finales dentro de la vista de pila.
Esto se puede hacer en el generador de interfaces y programáticamente.
fuente
Parece que la solución fue bastante simple. En vez de:
Acabo de escribir:
fuente