La pregunta que tengo es simple pero no pude encontrar ninguna información en la documentación.
¿Qué sucede con las restricciones de diseño cuando una vista se elimina de la jerarquía de vistas (o se mueve a otra vista)?
Por ejemplo, tengamos un contenedor C
con subvistas A
y B
. El contenedor C
tiene algunas limitaciones. Entonces llamamos [A removeFromSuperview]
. ¿Qué pasa con las restricciones para A
?
¿Qué pasa entonces si agregamos A
de C
nuevo?
ios
autolayout
nslayoutconstraint
Sulthan
fuente
fuente
Como también tenía esta pregunta, verifiqué los documentos de Apple solo por diversión, y resulta que está documentado que las restricciones se eliminaron.
La documentación del método removeFromSuperview de UIView indica:
No estoy seguro de si esto se documentó el año pasado cuando se publicó la pregunta original, pero pensé en compartir esta información en caso de que alguien la necesitara ...
fuente
Sin embargo, tenga en cuenta que si tiene dos vistas principales independientes A y B, y una subvista C, donde C es actualmente una subvista de A, con las restricciones adecuadas, llamar a [B addSubview: C] NO eliminará ninguna restricción relacionada con A y C, y el diseño automático comenzará a generar excepciones, porque esas restricciones ya no se relacionan con las vistas en la misma jerarquía.
Deberá llamar a [C removeFromSuperview] explícitamente para eliminar las restricciones, antes de agregar C a B.
Esto es cierto en Mac OS X: no he comprobado iOS
fuente
Las restricciones también se eliminan cuando
[A removeFromSuperview]
Se olvidan y volver a agregar A a C no agrega restricciones.
fuente
También se eliminan, puede hacer una prueba simple. Elija una vista SUBVIEW y cree restricciones conjuntas que restrinjan SUBVIEW para seguir su cambio de tamaño de supervista (como adjunto a los bordes de supervista). Para hacer eso, agregue SUBVIEW como una subvista a este CONTAINERVIEW y agregue como restricciones algo como eso:
V: | - [SUBVIEW] - |
H: | - [SUBVIEW] - |
Estas restricciones deben agregarse a la supervista SUBVIEW, por lo tanto, CONTAINERVIEW.
Si elimina SUBVIEW simplemente marcando todas las restricciones de CONTAINERVIEW, podría ver que ya no hay dos.
fuente
Esta pregunta también puede ser probada por el constructor de interfaces. Cuando arrastre y suelte a
UIView
en lasViewController
restricciones de adición y luego elimineUIView
, puede ver que las restricciones azules desaparecen.fuente