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.

Arbitur
fonte
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

Pavel Gurov
fonte
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.

dan
fonte
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

Zhivko Bogdanov
fonte
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

Christophercotton
fonte
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

oren
fonte
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.

Gabriel Jensen
fonte
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.

Jas_meet
fonte