Acabei de assistir o vídeo da WWDC nº 216, "Criando interface adaptativa com o UIKit".
Por volta das 45:10, Tony Ricciardi fala sobre mudanças no IB no Xcode 6 para apoiar as novas mudanças.
Ele diz "Você pode implantar esses documentos de volta para versões mais antigas do iOS".
(onde "Esses documentos" presumivelmente significam XIBs e storyboards que possuem configurações específicas para diferentes classes de tamanho.)
Eu não estou inventando isso. Vá assistir ao vídeo da WWDC.
Como isso é possível? Coleções de características e classes de tamanho são definidas apenas no iOS 8. Como o comportamento em tempo de execução que depende das construções da interface do usuário que são novas no iOS 8 funciona em versões anteriores do iOS?
Se é possível, seria maravilhoso. Você pode criar aplicativos que serão executados no iOS 6, 7 e 8 e aproveitar as novas capacidades flexíveis de layout da interface do usuário que a Apple adicionou ao Xcode 6. Eu mesmo criei a lógica da interface do usuário adaptável no código, e é um pouco de trabalho.
fonte
Respostas:
As alterações feitas na interface do usuário com classes de tamanho no Interface Builder DO aparecem corretamente nos dispositivos iOS 7 e na visualização no Xcode. Por exemplo, alterei algumas restrições de layout automático e tamanhos de fonte para Altura regular Largura regular e essas restrições alteradas são visíveis no iPad Simulator executando o iOS 7.0.
Todas as otimizações de classe de tamanho são disponibilizadas para o iOS 7, exceto as classes de tamanho que possuem uma Altura Compacta. Isso foi confirmado pela Apple e agora é declarado diretamente na documentação :
Para aplicativos compatíveis com versões do iOS anteriores ao iOS 8, a maioria das classes de tamanho é compatível com versões anteriores.
As classes de tamanho são compatíveis com versões anteriores quando:
- O aplicativo é construído usando o Xcode versão 6 ou posterior
- O destino de implantação do aplicativo é anterior ao iOS 8
- As classes de tamanho são especificadas em um storyboard ou xib
- O valor do componente de altura não é compacto
Como o iOS 7 não respeita duas classes de tamanho, se você usá-las, você terá problemas. Por exemplo: Quando você tem Compact w Any h definido e Compact w Compact h definido, no iOS 7 ele respeitará o Compact w Any h, mas no iOS 8 renderizará a aparência Compact w Compact h.
Portanto, se você deseja utilizar essas duas classes de tamanho e manter a compatibilidade com o iOS 7, eu faria as otimizações desejadas para o iPhone em paisagem em Qualquer w Qualquer h ou Compacto w Qualquer h, execute suas outras otimizações para diferentes classes de tamanho conforme necessário e, dessa forma, você não precisará usar nenhuma classe de tamanho com altura compacta e evitará problemas.
fonte
Compact-Compact
não é exportado para iOS 7;Compact-Regular
é. Veja minha resposta para mais detalhes.Ao implantar seu aplicativo no iOS 7, o Xcode compila seu storyboard de duas maneiras diferentes:
Para o iPhone, seu storyboard é compilado como "Compact-Regular" (largura compacta, altura regular) e é empacotado como sua ponta "~ iphone".
Para o iPad, seu storyboard é compilado como "Regular-Regular" e empacotado como sua ponta "~ ipad".
Portanto, se você deseja implantar no iOS 7 e no iOS 8, concentre seu design nas classes de tamanho Compact-Any e Regular-Any. Isso fornecerá a melhor experiência em termos de correspondência da interface do usuário entre os destinos de implantação. É claro que você pode modificar o layout para outras classes de tamanho, mas, a menos que essas modificações sejam aplicadas às classes de tamanho Compact-Regular ou Regular-Regular, você não verá essas modificações no iOS 7.
fonte
Nota: Esta resposta foi relevante para uma versão beta do Xcode 6 e não é mais aplicável à versão de remessa. Veja as respostas de Joey e Dave DeLong nesta página para obter informações adequadas.
(resposta original mantida abaixo):
Embora
Storyboards/XIBs
configurado para usar as classes de tamanhoiOS 7
, o sistema operacional não as respeita atualmentesize classes
e parece usar a classe de tamanho padrão 'Qualquer / Qualquer'.Concordo que o slide a que você está se referindo parece prometer tal compatibilidade, mas atualmente não parece ser o caso
(Xcode 6 beta 2)
.Para testar, criei um projeto
(iOS 8 SDK, deployment target of 7.1)
com um único botão centralizadovertically and horizontally
na classe de tamanho Qualquer / Qualquer, mas alinhado ao canto superior esquerdo na classe de tamanho Compacto / Compacto (por exemplo, iPhone na paisagem). O Assistente de visualização do Xcode mostra que o botão muda de posiçãoiOS 8
, mas nãoiOS 7
. Também confirmei esse comportamento em umiOS 7
dispositivo.fonte
Como algumas respostas e comentários discutiam a natureza da compatibilidade com versões anteriores, pensei em compartilhar um trecho direto da Documentação da Apple :
~~~~~
Implantando um aplicativo com classes de tamanho em versões anteriores do iOS
Para aplicativos compatíveis com versões do iOS anteriores ao iOS 8, a maioria das classes de tamanho é compatível com versões anteriores.
As classes de tamanho são compatíveis com versões anteriores quando:
~~~~~
Esse último tópico é direcionado a esta discussão, onde a Apple confirma que , enquanto "altura compacta" não for usada , ela deverá manter a compatibilidade com versões anteriores.
Espero que isso ajude alguém!
fonte
Ao lidar com o problema semelhante, encontrei outra resposta que ainda não vi aqui. Parece que as Classes de tamanho nos
XIB
arquivos não estão funcionando. Se eu criar protótipo de célula nostoryboard
arquivo, ele funcionará no iOS7, conforme explicado em outras respostas, no entanto, quando a mesma célula de protótipo for movida paraXIB
classes de tamanho de arquivo separadas, o iOS7 será ignorado.Aqui está o link para o projeto de amostra que demonstra esse comportamento: https://dl.dropboxusercontent.com/u/6402890/testSizeClasses.zip
Na célula protótipo, tenho quatro restrições de cada borda da vista cinza. Cada um deles é configurado da mesma maneira: Qualquer / Qualquer - 10, Regular / Regular - 20
Funciona bem no simulador iOS8 para XIB e Storyboard, e no iOS7 apenas as células definidas no Storyboard recebem restrições atualizadas no iPad:
fonte
Se isso poupa tempo a alguém, acredito que a maneira como o Xcode 6 fornece compatibilidade quase reversa para classes de tamanho é através dos storyboards históricos
~ipad
e com~iphone
sufixo, e nada mais. Isso faz sentido, uma vez que as classes de tamanho são uma maneira mais abstrata de como definimos anteriormente um storyboard para iPad e um storyboard para iPhone.Portanto:
Se seu objetivo é usar classes de tamanho para oferecer suporte a layouts específicos da família de dispositivos (iPad x iPhone), você tem sorte: as classes de tamanho são uma interface melhor para o método suportado anteriormente.
Se seu objetivo é usar classes de tamanho para oferecer suporte a layouts alterados para modelos diferentes na mesma família de dispositivos - por exemplo, iPhone 5/6/6 + incl. paisagem, então você está sem sorte . Para usá-los, seria necessário um destino de implantação mínimo do iOS 8.
fonte
@lducool - No criador de interface, no inspetor de identidade, altere 'Builds For' para iOS7.1 e posterior.
fonte
Infelizmente, as respostas de Dave e Joey não funcionam para mim. Não tenho permissão para comentar neste tópico, por favor, perdoe-me se este for o lugar errado.
Fiz uma pergunta específica para isso: Exemplo de interface do usuário adaptativa para paisagem de retrato do iPhone, compatível com versões anteriores do iOS 7
Pelo que aprendi até agora, acredito que agora, como no meu exemplo, não é possível ter duas restrições diferentes e separadas para um elemento da interface do usuário no modo retrato e paisagem com o iPhone iOS7 com base nas classes de tamanho. Ficaria feliz se eu estiver enganado.
fonte