Não consigo encontrar uma resposta clara na documentação da Apple sobre o Autolayout de cacau sobre a diferença entre abraços de conteúdo e resistência à compressão.
Alguém pode explicar seus usos e diferenças?
cocoa
autolayout
dmitrynikolaev
fonte
fonte
content-hugging
: lutaria contra ter espaço em branco. Isso apenas forçaria a vista a contornar você. Mas se você não tiver muito espaço e, em vez disso, tiver muito pouco espaço,content-compressions-resistance
lutará contra sua visão por não ser capaz de mostrar todo o seu conteúdo, por exemplo, os rótulos seriam truncados.Respostas:
Um rápido resumo dos conceitos:
Exemplo:
Digamos que você tenha um botão como este:
e você fixou as bordas em uma super visão maior com prioridade 500.
Então, se Abraçar a prioridade> 500, ficará assim:
Se Abraçar a prioridade <500, ficará assim:
Se a superview diminuir agora, se a prioridade da Resistência à compressão for maior que 500, será semelhante a
Caso contrário, se a prioridade da Resistência à compressão for <500, pode ser assim:
Se não funcionar assim, você provavelmente terá outras restrições que estão atrapalhando o seu bom trabalho!
Por exemplo, você pode tê-lo fixado à superview com prioridade 1000. Ou você pode ter uma prioridade de largura. Nesse caso, isso pode ser útil:
Editor> Tamanho para ajustar ao conteúdo
fonte
Dê uma olhada neste vídeo tutorial sobre o Autolayout , explicado com cuidado
fonte
fonte: @mokagio
Tamanho do conteúdo intrínseco - bastante auto-explicativo, mas as visualizações com conteúdo variável estão cientes do tamanho do conteúdo e descrevem o tamanho do conteúdo por meio dessa propriedade. Alguns exemplos óbvios de visualizações com tamanhos de conteúdo intrínsecos são UIImageViews, UILabels, UIButtons.
Prioridade de abraço de conteúdo - Quanto maior for essa prioridade, mais uma visualização resiste a crescer maior que o tamanho de seu conteúdo intrínseco.
Prioridade da resistência à compactação de conteúdo - Quanto maior essa prioridade, mais uma visualização resiste a encolher menor que seu tamanho de conteúdo intrínseco.
Verifique aqui para obter mais explicações: MAGIC DE LAYOUT AUTOMÁTICO: PRIORIDADES DE TAMANHO DE CONTEÚDO
fonte
Digamos que você tenha um botão com o texto "Clique em mim". Qual a largura desse botão?
Primeiro, você definitivamente não deseja que o botão seja menor que o texto. Caso contrário, o texto seria cortado. Essa é a prioridade da resistência à compressão horizontal.
Segundo, você não deseja que o botão seja maior do que precisa. Um botão que se parece com isso, [Click Me], é obviamente muito grande. Você deseja que o botão "abraça" seu conteúdo sem muito preenchimento. Este é o conteúdo horizontal que abraça a prioridade. Para um botão, ele não é tão forte quanto a prioridade da resistência à compressão horizontal.
fonte
Se
view.intrinsicContentSize.width != NSViewNoIntrinsicMetric
, o layout automático cria uma restrição especial de tipoNSContentSizeLayoutConstraint
. Essa restrição atua como duas restrições normais:view.width <= view.intrinsicContentSize.width
com a prioridade de abraço horizontal, eview.width >= view.intrinsicContentSize.width
com a prioridade da resistência à compressão horizontal.No Swift, com as novas âncoras de layout do iOS 9, você pode configurar restrições equivalentes como esta:
Da mesma forma, se
view.intrinsicContentSize.height != NSViewNoIntrinsicMetric
, o layout automático cria umNSContentSizeLayoutConstraint
que age como duas restrições na altura da vista. No código, eles ficariam assim:Você pode ver essas
NSContentSizeLayoutConstraint
instâncias especiais (se elas existirem) imprimindoview.constraints
após a execução do layout. Exemplo:fonte
As prioridades de resistência a compactação e resistência à compactação de conteúdo funcionam para elementos que podem calcular seu tamanho intrinsecamente, dependendo do conteúdo que está chegando.
Dos documentos da Apple :
fonte
O
Content hugging priority
é como uma faixa de borracha que é colocada em torno de uma vista. Quanto mais alto o valor da prioridade, mais forte a faixa de borracha e mais ela deseja abraçar o tamanho do conteúdo. O valor da prioridade pode ser imaginado como a "força" do elásticoE isso
Content Compression Resistance
é, o quanto uma visualização "resiste" ficando menor A Visualização com maior valor de prioridade de resistência é aquela que resistirá à compactação.fonte