Sobre o tamanho do conteúdo intrínseco, a prioridade de envolvimento do conteúdo, a prioridade de resistência à compactação do conteúdo, C prioridade de restrição

Sobre o tamanho do conteúdo intrínseco, a prioridade de envolvimento do conteúdo, a prioridade de resistência à compactação do conteúdo, C prioridade de restrição

no layout automático

No processo de usar o Autolayout, é inevitável que você encontre problemas como esses. Frank resolveu essas quatro instruções e exemplos relacionados de uma vez. Vamos esclarecê-los todos de uma vez!

tamanho do conteúdo intrínseco (tamanho do conteúdo fixo)

O tamanho de alguns componentes é fixo. O denominado fixo não significa que não possa ser ajustado, mas que não necessita de uma definição especial. O Autolayout determinará automaticamente o seu tamanho fixo de acordo com o seu conteúdo de texto. Por exemplo: rótulo e botão são esses componentes. As duas figuras a seguir são usadas para ilustrar isso.

Eu puxei um “Rótulo” do Storyboard e apenas defini as restrições de centralização horizontal e vertical. Neste momento, ocorrerão conflitos de “Não” (imagem à esquerda). Pelo contrário, “ImageView” terá “conflitos” (imagem à direita).


prioridade de envolvimento de conteúdo (prioridade máxima de conteúdo)

A prioridade é “quanto mais alta, mais apertada”, o que significa que menos facilmente ela é esticada e mais alta. O valor padrão é 251. Conforme mostrado na figura abaixo, Label2 priority & gt; Label1. Você também pode pensar nesta propriedade como o espaço ocupado por View (Label) no SuperView.

Se houver uma restrição definida, o atributo será exibido no Inspetor de tamanho e pode ser redefinido. A prioridade de abrangência do conteúdo não é global, mas apenas comparada com todos os componentes no SubView. Por exemplo, Frank coloca esses dois Labels em um StackView, e a configuração da propriedade de prioridade de envolvimento de conteúdo é apenas uma comparação entre os dois.

O seguinte tentará criar um conflito de prioridade que abraça o conteúdo e tentará resolvê-lo:

Como a tela, extraia dois rótulos e incorpore-os na Visualização de pilha e defina as restrições da Visualização de pilha, altura fixa = 50 , centralizar verticalmente , A largura é dimensionada de acordo com a proporção da tela

Observações: *** Observe que a largura do rótulo não pode ser fixa, caso contrário, não criará um conflito de prioridade de abraço de conteúdo ***.

É muito claro que o Xcode nos avisa que existe um conflito de prioridade de abraço de conteúdo. Devemos ajustar a Prioridade de abraço de conteúdo horizontal de Label1 para 250 ou ajustar a Prioridade de abraço de conteúdo horizontal de Label2 para 252. Na verdade, só precisamos ajustar um deles. , Como o padrão é 251, só precisamos entender claramente qual é o preferido para o Autolayout.

Mude para o tamanho Inspector de Labe l 1 e ajuste Content Hugging Priority Horizontal para 252. Neste momento, a prioridade de Label1> Label2, o vernáculo é que Label1 é melhor que Label2 é mais compacto e os resultados são os seguintes:

Pelo contrário, ajuste a Prioridade horizontal de abraço de conteúdo do Label2 para 252 e o resultado é o seguinte (lembre-se de ajustá-lo para 251 para o Label1):

prioridade de resistência à compressão de conteúdo (prioridade de resistência à compressão de conteúdo)

Prioridade “Quanto maior a prioridade, menor a probabilidade de ser compactado”, o valor padrão é 750. Como no exemplo anterior, quando o texto do conteúdo não se comprime, ocorre o problema de prioridade do encapsulamento do conteúdo; por outro lado, quando o texto é muito grande para se comprimir, não haverá problema, porque não há espaço suficiente, que tal compactação? Ah! ! ! Ocorrerão apenas problemas de prioridade de resistência à compressão de conteúdo! Conforme mostrado abaixo, Label2 priority & gt; Label1 (meu conteúdo é muito longo, muito longo, muito longo, muito longo, muito longo, muito longo, muito longo). Quando a largura não for suficiente para caber todo o texto, o Autolayout usará “…” em seu lugar.

Se houver uma restrição definida, o atributo será exibido no Inspetor de tamanho e pode ser redefinido. A prioridade de resistência à compressão do conteúdo não é global, mas apenas comparada com todos os componentes no SubView. Por exemplo, Frank coloca esses dois rótulos em um StackView, e a configuração da propriedade de prioridade de resistência à compressão de conteúdo é apenas uma comparação entre os dois.

O seguinte começa a tentar criar um conflito de prioridade de resistência à compressão de conteúdo e tentar resolvê-lo:

A tela continua a partir do exemplo anterior. Aqui, você só precisa alterar o texto do Label1 para “Meu conteúdo é muito longo, muito longo, muito longo, muito longo, muito longo, muito longo” para que esse conflito ocorra.

É muito claro que o Xcode nos avisa que há um conflito de prioridade de resistência de compressão de conteúdo. Devemos ajustar a prioridade de resistência de compressão de conteúdo Horizontal de Label2 para 749, mas na verdade não precisa necessariamente ser 749, desde que seja inferior a Label1. Defina-o como 750, só precisamos entender claramente qual é o preferido para o Autolayout.

Tente ajustar Labe2 para 749. Neste momento, o tamanho de Label2 é comprimido para (0, 0).

Pelo contrário, se não quiser que o Label2 seja compactado, você pode aumentar a prioridade horizontal da resistência à compressão do conteúdo do Label2

Observações: Na prática, a “prioridade de compactação de conteúdo” e “prioridade de resistência à compactação de conteúdo” dos nomes de campo são geralmente definidas mais altas, porque os usuários nem sabem o que estão digitando. !

prioridade de restrição (prioridade de restrição)

Na verdade, as restrições gerais têm prioridade, e o padrão é o mais alto 1000

O seguinte usa um exemplo para ilustrar isso:

Semelhante à tela, arraste um conteúdo de texto Label para definir “Meu conteúdo é muito longo, muito longo, muito, muito, muito, muito, muito, muito, muito longo”, largura fixa = 50 , Centralizar horizontalmente , Centrar verticalmente

Conforme mostrado na figura acima, o conteúdo do texto é compactado porque a prioridade da resistência à compressão do conteúdo horizontal (padrão 750) & lt; prioridade da restrição de largura (padrão 1000), neste momento, tente ajustar a prioridade da restrição de largura & lt; 750 Haverá resultados inesperados