No puedo encontrar una respuesta clara en la documentación de Apple con respecto a Cocoa Autolayout sobre la diferencia entre el abrazo de contenido y la resistencia a la compresión.
¿Alguien puede explicar sus usos y diferencias?
cocoa
autolayout
dmitrynikolaev
fuente
fuente
content-hugging
: lucharías contra tener espacio en blanco. Simplemente forzaría la vista a rodearlo. Pero si no tienes demasiado espacio y, en cambio, tienes muy poco lugar, entoncescontent-compressions-resistance
lucharías contra tu visión de no poder mostrar todo su contenido, por ejemplo, las etiquetas se truncarían.Respuestas:
Un resumen rápido de los conceptos:
Ejemplo:
Digamos que tienes un botón como este:
y has fijado los bordes a una supervista más grande con prioridad 500.
Entonces, si la prioridad de Abrazo> 500 se verá así:
Si Abrazando prioridad <500 se verá así:
Si la supervista ahora se reduce, entonces, si la prioridad de Resistencia a la compresión> 500, se verá así
De lo contrario, si la Resistencia a la compresión tiene prioridad <500, podría verse así:
Si no funciona así, entonces probablemente tengas otras restricciones que están arruinando tu buen trabajo.
Por ejemplo, podría tenerlo clavado en la supervista con prioridad 1000. O podría tener una prioridad de ancho. Si es así, esto puede ser útil:
Editor> Tamaño para ajustar contenido
fuente
Eche un vistazo a este video tutorial sobre Autolayout , lo explican cuidadosamente
fuente
fuente: @mokagio
Tamaño de contenido intrínseco : bastante explicativo, pero las vistas con contenido variable son conscientes de cuán grande es su contenido y describen el tamaño de su contenido a través de esta propiedad. Algunos ejemplos obvios de vistas que tienen tamaños de contenido intrínsecos son UIImageViews, UILabels, UIButtons.
Prioridad de abrazo de contenido : cuanto mayor es esta prioridad, más se resiste una vista a crecer más que su tamaño de contenido intrínseco.
Prioridad de resistencia de compresión de contenido : cuanto mayor sea esta prioridad, más resistirá una vista a reducirse a un tamaño de contenido intrínseco menor.
Consulte aquí para obtener más explicaciones: MAGIA DE DISEÑO AUTOMÁTICO: PRIORIDADES DE TAMAÑO DEL CONTENIDO
fuente
Digamos que tiene un botón con el texto "Haga clic en mí". ¿Qué ancho debe tener ese botón?
Primero, definitivamente no quieres que el botón sea más pequeño que el texto. De lo contrario, el texto se recortaría. Esta es la prioridad de resistencia a la compresión horizontal.
En segundo lugar, no desea que el botón sea más grande de lo necesario. Un botón que se parece a esto, [Click Me], obviamente es demasiado grande. Desea que el botón "abrace" su contenido sin demasiado relleno. Este es el contenido horizontal que abarca la prioridad. Para un botón, no es tan fuerte como la prioridad de resistencia de compresión horizontal.
fuente
Si
view.intrinsicContentSize.width != NSViewNoIntrinsicMetric
, entonces el diseño automático crea una restricción especial de tipoNSContentSizeLayoutConstraint
. Esta restricción actúa como dos restricciones normales:view.width <= view.intrinsicContentSize.width
con la prioridad de abrazo horizontal, yview.width >= view.intrinsicContentSize.width
con la prioridad de resistencia de compresión horizontal.En Swift, con los nuevos anclajes de diseño de iOS 9, puede configurar restricciones equivalentes como esta:
De manera similar, si
view.intrinsicContentSize.height != NSViewNoIntrinsicMetric
, entonces el diseño automático crea unaNSContentSizeLayoutConstraint
que actúa como dos restricciones en la altura de la vista. En código, se verían así:Puede ver estas
NSContentSizeLayoutConstraint
instancias especiales (si existen) imprimiendoview.constraints
después de que se haya ejecutado el diseño. Ejemplo:fuente
Las prioridades de Resistencia de compresión de contenido y compresión de contenido funcionan para elementos que pueden calcular su tamaño intrínsecamente dependiendo de los contenidos que ingresan.
De los documentos de Apple :
fuente
El
Content hugging priority
es como una banda de goma que se coloca alrededor de una vista. Cuanto mayor es el valor de prioridad, más fuerte es la banda elástica y más quiere abrazar a su tamaño de contenido. El valor de prioridad se puede imaginar como la "fuerza" de la banda elásticaY
Content Compression Resistance
es decir, cuánto se "resiste" una vista cada vez más pequeña. La vista con mayor valor de prioridad de resistencia es la que resistirá la compresión.fuente