Xcode 6 Storyboard do tamanho errado?

139

Criei um novo projeto a partir do zero no Swift no Xcode 6 (Beta 1) e vi um comportamento estranho no Storyboards e na saída que estou visualizando.

Eu construí uma interface simples (como mostrado abaixo) - com as propriedades do View Controller incluídas. Quando eu executo isso no simulador, espero que 'Hello, World' seja central na interface do usuário - no entanto, parece que esse 'Square' está simplesmente sendo encaixado na tela do iPhone e, portanto, a exibição errada está sendo exibida (veja abaixo )

Minha pergunta é: alguém mais viu esse comportamento e como eles o corrigiram?

Obrigado!

Vista do editor de storyboard

Inspetor de atributos

Inspetor de tamanho

Saída do Simulador

Algodão doce
fonte
adicione restrições de layout automático, que devem corrigi-lo. você está projetando atualmente para todos os layouts, portanto, os layouts automáticos ajudarão a exibir o conteúdo no local "certo".
Raz
8
Dicas: Usando o editor assistente> automático> Visualizar, você poderá ver uma visualização da tela com todos os tamanhos de tela
Francescu

Respostas:

81

Embora a resposta de Asif Bilal seja uma solução mais simples que não envolva Classes de tamanho (que foram introduzidas no iOS 8.), é altamente recomendável que você se acostume com as classes de tamanho como elas são no futuro e, eventualmente, você poderá ponto."


Você provavelmente não adicionou as restrições de layout.

Selecione seu rótulo, toque no botão de restrições de layout na parte inferior:

insira a descrição da imagem aqui

Nesse menu, adicione largura e altura (NÃO deve ser a mesma que a minha) marcando a caixa de seleção e clique em adicionar restrições. Em seguida, arraste a etiqueta com o controle para a tela principal e, quando você clicar novamente, deverá ter as opções para centralizar horizontal e verticalmente no contêiner. Adicione ambos e você deverá estar configurado.

Can Poyrazoğlu
fonte
1
Excelente - isso funcionou muito bem para mim - Obrigado por sua ajuda (aceitará sua resposta quando o timer é levantado)
Candyfloss
1
Você é bem vindo. Esse é o comportamento padrão do autolayout, que está ativado por padrão agora. Lembre-se de que, devido a possíveis tamanhos / layouts de tela diferentes, deve haver uma maneira de calcular onde uma exibição será posicionada em relação ao pai, e o layout automático corrige esse problema. quando você não adiciona essas restrições, a exibição as cria automaticamente em tempo de execução, mas em relação ao canto superior esquerdo. Se você precisar de algo além disso (quase sempre precisa de algo mais), precisará especificar as restrições explicitamente.
Pode Poyrazoğlu
4
Observe que não é necessário arrastar o controle (o que pode ser complicado). O botão à esquerda do selecionado nesta imagem abre um menu que permite fixar os centros horizontais e verticais.
Jrturton #
Você está certo .. Estou acostumado a controlar-arrastar, por isso contei dessa maneira.
Pode Poyrazoğlu
@ CanPoyrazoğlu - Você mencionou "Selecione seu rótulo". Qual etiqueta? Eu tenho o mesmo problema com um novo projeto do iPhone no qual não tenho rótulos ou outros elementos da interface do usuário. Meu primeiro projeto no Xcode 6, usando Objective C.
rattletrap99
253

Execute as etapas a seguir para resolver o problema

No Storyboard, selecione qualquer vista e vá para o Inspetor de arquivos. Desmarque a opção "Usar classes de tamanho", solicitando que você mantenha os dados da classe de tamanho para: iPhone / iPad. E, em seguida, clique no botão "Desativar classes de tamanho". Isso aumentará o tamanho da visualização do storyboard com o dispositivo selecionado.

Asif Bilal
fonte
8
Esta é a resposta correta se você estiver obtendo um controlador de visualização de 600x600 quando desejava um controlador de visualização padrão do tamanho do iPhone, por exemplo.
Fraggle
5
Esta deve ser a resposta correta (pelo menos para aqueles único trabalho na plataforma não-Universal)
Raptor
36
Não sei por que as pessoas marcaram isso como resposta certa ... a primeira é a maneira que deve ser feita ... Se você não gosta de restrições de layout, está indo na direção inversa ... A Apple está aproveitando uma boa maneira de desenvolver para todos os tamanhos de iPhone e iPads e você só quer voltar para as coisas antigas? Porque você não pode se atualizar? Nunca se votou mas parece esta resposta confunde as pessoas e faz com que, em seguida, usar a abordagem de idade (que será obsoleto) em vez de encorajar, em seguida, usar o material novo ...
Raphael Ayres
3
Top resposta para todo mundo que está acostumado a storyboards / iPad iPhone
mamarx
3
Use as restrições de layout ... A Apple está fazendo isso da mesma maneira que o Android funciona. A exibição não tem forma ... Às vezes pode ser uma dor, mas se você forçar o tamanho, seu aplicativo ficará ruim em diferentes tamanhos de dispositivo. Se você deseja que um botão apareça no canto inferior direito, basta criar 2 restrições para ele e banir ... nenhuma seleção X ou Y. Tudo será definido pelo mecanismo. Use tamanhos intrínsecos. Use sua imaginação. Use restrições relacionais. Aprenda isso ***.
Raphael Ayres
18

Se você estiver usando o Xcode 6 e criando o iOS 8, nenhuma dessas soluções está correta. Para que as visualizações apenas do iPhone sejam dimensionadas corretamente, não desative as classes de tamanho, desative métricas inferidas e não defina restrições (ainda). Em vez disso, use o controle de classe de tamanho, que é um botão de texto fácil de perder na parte inferior do Interface Builder que inicialmente lê "wAny hAny".

Clique no botão e escolha Largura compacta, Altura regular. Isso redimensiona suas visualizações e cobre todas as orientações de retrato do iPhone. Os documentos da Apple aqui: https://developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/SelectingASizeClass.html ou procure em "Selecionando uma classe de tamanho no Interface Builder"

Eli Burke
fonte
Eu acho que é útil ler toda a Ajuda de design de classes de tamanho no seu link, ou seja, de Sobre o design de várias classes de tamanho até a implantação de um aplicativo com classes de tamanho nas versões anteriores do iOS .
Franklin Yu
Essa é uma ótima solução se você deseja manter o layout automático, mas deseja que as visualizações do storyboard apareçam como paisagem ou retrato em vez de um quadrado.
precisa
5

No Storyboard, selecione seu ViewController e vá para o Atribute Inspector. No topo, em Métricas simuladas, você tem as propriedades Tamanho e Orientação definidas como Inferidas. Altere-os para os valores desejados.

Para que um aplicativo seja exibido corretamente em outro tamanho de tela, você também precisa configurar restrições, conforme descrito por Can Poyrazoğlu na primeira postagem.

David Andrews
fonte
5

Eu tive esse problema no xcode 6 e existe uma maneira de resolver os conflitos de redimensionamento. Se você selecionar sua visualização, na parte inferior, verá um ícone que se parece com | -Δ- |. Se você clicar nele, seu projeto será redimensionado para diferentes dispositivos.

user2961953
fonte
Sim e depois que você selecionar o símbolo triângulo clique em restrições falta add e crescer você é feito vista irá redimensionar de acordo com o tamanho do dispositivo se a sua aplicação universal
Vishal dharankar
3

Vá para o Inspetor de atributos (canto superior direito) Nas Métricas simuladas, que possuem as propriedades Tamanho, Orientação, Barra de status, Barra superior, Barra inferior. Para SIZE, altere Inferred -> Freeform.

Rachel
fonte
+1 @ Rachel, obrigado por esta pequena dica útil sobre Métricas simuladas -> Tamanho: "Forma livre" (também conhecida como "habilite um tamanho personalizado para um xib reutilizável apoiado por uma exibição personalizada").
cweekly
3

Na página do seu storyboard, vá para o File Inspector e desmarque 'Usar classes de tamanho'. Isso deve reduzir o seu controlador de exibição para o tamanho normal do IPhone com o qual você estava familiarizado. Observe que o uso de 'classes de tamanho' permitirá que você projete seu projeto em vários dispositivos. Depois de desmarcar, o Xcode exibirá um diálogo de aviso da seguinte forma. Isso deve ser auto-explicativo.

"A desativação das classes de tamanho limitará este documento ao armazenamento de dados para uma única família de dispositivos. Os dados da classe de tamanho que melhor representam o dispositivo de destino serão mantidos e todos os outros dados serão removidos. Além disso, as sequências serão convertidas em suas equivalentes adaptativos ".

Oh meu
fonte
3

Para quem usa o XCode 7, é muito fácil criar um tamanho de dispositivo específico (em vez da tela quadrada padrão).

No Interface Builder, selecione seu ViewController ou Scene no menu esquerdo. Em baixo Show the Attributes Inspector, vá para Simulated Metricse escolha o desejado Sizeno menu suspenso.

Sacerdote
fonte
Isso permitirá que você crie no storyboard para esse dispositivo. Quando você executa o aplicativo, seu design pode variar bastante para diferentes tamanhos de tela.
Joey Tawadrous
@JoeyTawadrous Exatamente. Mas ele responde à pergunta feita :)
Priest
2

Você provavelmente deve usar "Resolver problemas de layout automático" (ícone do triângulo inferior direito na exibição de storyboard) para adicionar / redefinir as restrições sugeridas (Xcode 6.0.1).

swnn
fonte