Autolayout: Adicionar restrição ao superview e não ao Top Layout Guide?


112

Eu tenho um UIView no meu UIViewController no storyboard que desejo adicionar uma restrição ao espaço que visualiza a uma distância da borda superior.

Agora, quando faço o de costume pressionando ctrl + arrasto para a visualização principal do ViewController, só tenho a opção de configurá-lo como guia de layout superior.

Isso é um problema para mim porque em um ponto do aplicativo irei mover a visualização principal em torno de 20-50px e o que acontece é que a visualização que eu tenho não será movida ... porque não está alinhada com o superview.

Como posso fazer isso manualmente no storyboard ou tenho que adicioná-lo programaticamente?

Estou usando o xcode 6.


Você pode arrastar e soltar na entidade correta no esboço do documento à esquerda? - Objetos de cena nesta captura de tela: ptgmedia.pearsoncmg.com/images/chap5_9780672335761/elementLinks/…
— Woodstock

Eu também tentei isso, mesmo resultado
— Arbitur

Respostas:


306

Há uma seta à direita do valor da constante de restrição. Se você clicar nele, um menu aparecerá onde você pode escolher o que deseja relacionar à sua restrição. Se você escolher 'Exibir', será fixado no topo da exibição.

insira a descrição da imagem aqui


6
Aleluia! Eu não sabia o que fazer quando eles removeram o menu Editor -> Fixar.
— Jeremy Hicks

4
não posso acreditar que não vi isso antes. Impressionante.
— zumzum

9
Apenas uma observação para pessoas que não têm noção do que eu -> você pode não conseguir fazer essa alteração a menos que a visualização à qual você está adicionando a restrição esteja abaixo do guia de layout superior. Tive uma visão acima do guia de layout superior e "Guia de layout superior" não era uma opção no menu suspenso. O que provavelmente é uma declaração "duh" para não novatos como eu :)
— Ryan James

2
É sobre essas pequenas sutilezas do Xcode. Isso faz muito. :)
— março

Apenas um rápido esclarecimento que me confundiu: apesar de a imagem ter o Guia de Layout Superior marcado, se você quiser fixar a visualização no TOPO da visualização como o topo do dispositivo, selecione "Visualizar".
— Micnguyen

57

Você deve ser capaz de fazer isso destacando a visualização desejada no storyboard e, em seguida, selecionando Editor > Pin > Top Space to Superviewno menu superior.


Isso está desatualizado no XCode 7, consulte a resposta de @PaulGurov.


Funciona como um encanto - XCode 6.3
— NKorotkov

4
Eles removeram 'pin' do menu do editor no Xcode 7. Alguma solução nova?
— Kyle G

14

TL; DR: Você pode restringir à margem pressionando a Alttecla no teclado.


Também se pode acrescentar que, se a visão que você está tentando fixar não for uma subvisualização direta da visão na qual deseja fixá-la, a abordagem sugerida não é realmente válida. Digamos que a hierarquia de visualização seja assim e você deseja fixar a visualização da imagem ( Parallax Image Viewneste caso) na visualização do controlador de visualização ( Viewneste caso).

insira a descrição da imagem aqui

Para fazer isso, basta Control+ Dragdo Parallax Image Viewpara o View. Isso apresenta as opções padrão onde você pode ver Vertical Spacing to Top Layout Guidepara fixar o Parallax Image Viewguia de layout superior.

insira a descrição da imagem aqui

O que você deseja é fixá-lo no topo (margem) da visualização. Para fazer isso, você tem que mudar para o outro conjunto de restrições pressionandoAlt

insira a descrição da imagem aqui


Dica muito útil. Isso realmente resolveu meu problema.
— Machado

Funciona para mim, mas não sei como adicionar várias restrições ao mesmo tempo. Agora, tenho que adicionar um por um, para levar tempo.
— Duc Nguyen

3

Eu já tinha um monte de restrições e só queria alterá-las em vez de quebrá-las. Acontece que se você clicar duas vezes na restrição para editar e, em seguida, clicar no item que tem a ".Margem", você pode simplesmente desligar a opção "Relativa à margem" selecionando esse item.

Selecione o relativo à margem


Era isso que eu procurava quando vim aqui! Obrigado
— netigger

1

A resposta de Dan funciona. Eu só queria afirmar que se você definir sua visualização no storyBoard em y <20 e configurar as restrições por meio do painel de pinos, ele será definido como supervisualização:

insira a descrição da imagem aqui

insira a descrição da imagem aqui


0

Se a altura da visualização for definida como 0 por acidente, o Espaço vertical para guia de layout superior NÃO aparecerá. No entanto, o guia de espaço vertical para layout inferior aparecerá, o que deve ter feito sentido para alguém dentro da Apple por volta de 2004.


0

Nenhuma das respostas acima funcionou para mim, em vez disso, tenho que fazer um hack para definir o topo da minha subvisualização com o topo do superview em vez do guia de layout Superior.

  • Primeiro, defina o centro da subvisualização verticalmente com a supervisualização.
  • Em seguida, altere as restrições Center Y para a subvisualização e também a supervisualização para a restrição Superior .

Você está pronto para ir agora.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.