ios - tutorial - xcode constraint priority




O que é "Restringir à margem" no Storyboard no Xcode 6 (2)

A propriedade no UIView é: layoutMargins . Veja os documentos da Apple . Basicamente, se as margens do layout forem 8,8,8,8 (o padrão), uma restrição com 0 espaços iniciais para a margem do contêiner terá uma posição x de 8. Observe que isso só está disponível no iOS8 ou posterior.

Para todos que não querem que suas restrições passem para a margem do contêiner:

CTRL + clique + arraste para mostrar o pop-up de criação de restrição.

Se o menu mostrar para criar a restrição para a margem por padrão, mantenha pressionada a opção / alt para permitir que a restrição seja feita no contêiner e não na margem do contêiner.

Agora ele mostrará a opção de criar a restrição NOT para a margem. Isso é muito mais rápido no meu uso.

Estou trabalhando com autolayout e restrições e descobri que há uma opção Constrain to margins no XCode 6 que não estava presente no XCode 5 e é marcada por padrão.

Eu criei um projeto de teste, em seguida, adicionei um UITableView em um ViewController com o conjunto de quadros para o mesmo tamanho que a visualização e adicionei restrições

XCode 6 Você pode ver aqui mesmo que o tableview tenha o mesmo frame que o XCode sugere para adicionar -16 como restrição, enquanto o XCode 5 sugere adicionar o espaçamento 0.

Agora, quando você desmarca a opção "Restringir à margem", ela se comporta como XCode 5 e sugere adicionar 0 como restrição

Além disso, descobri que, uma vez que adiciono restrição com Restringir à margem marcada, não consigo mais abrir o arquivo do storyboard no XCode 5, então é definitivamente algo novo no XCode 6

Espero que eu possa explicar a minha pergunta corretamente. Eu gostaria de entender o que "Restringir à margem" realmente faz e quando eu deveria e não deveria usá-lo. Eu peço desculpas se é algo muito simples e óbvio.

EDITAR

Eu encontrei algo sobre as margens do layout em discussão aqui , gostaria de saber se está relacionado a isso.


Eu não entendo por que as pessoas estão reclamando que "as margens causariam uma falha imediata em qualquer coisa antes do iOS 8. "

Definir suas restrições em relação à margem em um arquivo xib ou storyboard NÃO faz o seu aplicativo travar no iOS7 e também NÃO faz uma diferença na interface do seu dispositivo iOS7, contanto que você não toque no UIView.layoutMargins e no UIView.preservesSuperviewLayoutMargins propriedades em seu código.

O que é margens no iOS8

As margens de layout representam o preenchimento em torno do interior de uma UIView que o sistema de layout pode usar ao dispor subvisualizações - para garantir que uma lacuna seja deixada entre a borda de uma vista e uma subvisualização. A este respeito, é muito parecido com a propriedade de preenchimento associada a blocos em CSS.

Por padrão, um UIView tem margens de layout de 8 pontos em cada lado, e isso não pode ser alterado no Interface Builder . No entanto, definindo a propriedade UIView.layoutMargins no código, que está disponível apenas no iOS8, você pode ajustar esses valores.

Você pode fazer com que o IB exiba as margens com Editor> Tela> Mostrar retângulos de layout:

As margens podem ser usadas para ajudar a organizar suas visualizações e subvisualizações. Cada UIView vem com margens por padrão, mas elas afetam apenas o posicionamento da exibição quando você configura uma restrição relacionada a uma margem.

Como usar as margens

A única maneira de usar as margens no Interface Builder é verificar a opção Relative to margin enquanto configura suas restrições. É assim que você direciona sua restrição para Usar margens em vez de bordas ao exibir minha visualização.

Vamos dar uma olhada em quatro maneiras diferentes de configurar uma restrição principal entre uma visualização e sua subvisão. Para cada restrição, revisamos a primeira associação descrita e o segundo será o líder da subview . O que você deseja prestar atenção é o status de seleção e desmarcação da opção Relativo à margem de cada extremidade da restrição, porque isso define se a restrição está vinculada à margem ou à borda da exibição.

  1. Primeiro item (desmarque), segundo item (seleção): Neste caso, estamos declarando que a borda esquerda da sub-vista deve se alinhar à margem esquerda da super visão (como mostrado nesta imagem).

  1. Primeiro item (desmarque), segundo item (desmarque): Ambos usando borda, não margem . Nesse caso, estamos declarando que a borda esquerda da subguia deve se alinhar à borda esquerda da superview.

  1. Primeiro item (check), segundo item (desmarque): Neste caso, estamos declarando que a margem esquerda da sub-visão deve se alinhar à borda esquerda da superview. Esse tipo de layout faz com que a subview se sobreponha à superview.

  1. Primeiro item (cheque), segundo item (cheque). Isso realmente tem o mesmo efeito que o caso 2, já que tanto a subview quanto a superview possuem uma mesma margem padrão. Estamos declarando que a margem esquerda da sub-visão deve se alinhar à margem esquerda da superview.

O que é bom em margens?

Esse novo recurso (iOS8) só afeta o desenvolvimento da interface do usuário se você decidir usar as margens.

Ao usar as margens, você pode ajustar o posicionamento de várias subvisualizações que compartilham uma relação comum com uma superview compartilhada, alterando o valor de uma única propriedade. Esta é uma vitória clara sobre a definição de todas as restrições associadas com valores fixos, porque se você precisar atualizar todo o espaçamento, em vez de alterar cada valor um por um, poderá modificar simultaneamente o posicionamento relevante atualizando a margem da superview com uma única linha código como este:

self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0);

Para ilustrar esse benefício, no caso a seguir, todas as bordas esquerdas das subvisualizações são alinhadas à margem esquerda da supervisualização. Assim, a alteração da margem esquerda da superview afetará todas as subvisualizações ao mesmo tempo.







xcode6