Convertendo o Storyboard do iPhone para o iPad

Eu tenho um aplicativo para iPhone que tem um storyboard. Agora eu quero fornecer um aplicativo para iPad também. Por isso, perguntei-me se existe uma function que me ajude a converter o meu storyboard do iPhone em um storyboard do iPad .

Para ser específico:

Existe uma function semelhante ou existe apenas o modo manual?

Eu descobri um tipo de solução:

  1. Duplique o seu iPhone-Storyboard e mude o nome MainStoryboard_iPad.storyboard

  2. Feche o Xcode e abra este arquivo em qualquer editor de texto.

  3. Procure targetRuntime="iOS.CocoaTouch" e altere-o para targetRuntime="iOS.CocoaTouch.iPad"

  4. Altere o código no MainStoryboard_iPad.storyboard de:

    para

  5. Agora salve tudo e reabra o Xcode. O iPad-Storyboard tem o mesmo conteúdo que o arquivo do iPhone, mas tudo pode ser desarranjado.

Isso me salvou horas – espero que isso ajude você

Se você tivesse criado um projeto universal, por padrão o storyboard vazio do iPad teria sido criado, basta selecionar o storyboard do iPhone para selecionar todos (Command + A), copiar (Command + C) e colá-lo no storyboard do iPad. Certifique-se de mover o ponto de input do storyboard vazio para o storyboard recém-copiado antes de compilá-lo.

Isso não funcionou bem para mim. Eu fiz algo um pouco diferente.

  1. Crie um novo arquivo de story board para a versão do iPad
  2. Abra o novo arquivo e o arquivo que eu quero copiar em textwrangler (editor de texto)
  3. Copiou o texto xml do arquivo antigo para o novo arquivo entre essas tags xml
  4. Primeira tag
  5. Cole aqui
  6. End Tags

Isso funcionou para mim. Eu tenho um novo layoutout com todas as minhas tomadas conectadas, o que só me salvou algumas horas.

Da leitura de muitos threads no stackoverflow eu descobri que a solução é-

1.Duplicar seu iPhone-Storyboard e renomeá-lo MainStoryboard_iPad.storyboard

2. clique no storyboard -> “abrir como” -> “Código Fonte”.

3.Procure por targetRuntime = “iOS.CocoaTouch” e mude para targetRuntime = “iOS.CocoaTouch.iPad”

5.Procure por e altere para

4. Agora salve tudo e clique com o botão direito em MainStoryboard_iPad.storyboard “open as” -> “IOS StoryBoard” 5. você também pode ter que mudar suas restrições. Isso é tudo que você fez.

 1. Create New Storyboard file with MainStoryboard_iPad.storyboard 2. Copy All the views from MainStoryboard and paste to MainStoryboard_iPad.storyboard 

1 – Crie o seu "MainStoryboard_iPad.storyboard";

2 – Clique com o botão direito do mouse em "MainStoryboard_iPhone.storyboard" e “Open as -> Source Code”. Copie tudo;

3- Clique com o botão direito do mouse em "MainStoryboard_iPad.storyboard" e “Open as -> Source Code”. Cole tudo. Agora pesquise e altere:

  • targetRuntime="iOS.CocoaTouch" to targetRuntime="iOS.CocoaTouch.iPad"
  • type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" to type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.iPad.XIB"

4 – Salvar. Agora reabra mas usando o construtor de interface. Você só terá que reorganizar.

Esse método também pode ser usado para arquivos .xib

Isto está indo para o outro lado, mas eu pude fazer um select all & copy no meu storyboard do iPad (~ 35 cenas) e colá-lo no meu storyboard do iPhone. Os tamanhos das cenas foram ajustados automaticamente. Eu só vi dois problemas, tive que replace o UISplitViewController (já que é apenas o iPad), e o plano de fundo padrão tornou-se transparente em vez de cinza (ainda trabalhando para corrigir isso corretamente, sem definir manualmente o fundo para tudo).

EDIT: Parece que o plano de fundo padrão para UITableView no inspetor de atributos é bastante estranho. Eu tive que definir manualmente o plano de fundo para “Group Table View Background Color” para exibições de tabela agrupadas e “White Color” para exibições de tabela não agrupadas. Em seguida, ele foi exibido como “Padrão” (suponho que correspondesse a um valor codificado). – Na verdade, ainda mais fácil, mudar de “Agrupado” para “Estático” e voltar parece redefinir a cor padrão.

Aqui está algo que me salvou horas e pode ajudar aqueles com habilidades em Python.

Eu tenho construído um aplicativo nos últimos dois meses, focado apenas em iPad, interagindo com o UX com a equipe.

Hoje, com foco na criação da versão para iPhone, segui os passos acima (obrigado!), Mas eu não queria ter que resize todos os elementos de interface do usuário das dimensões do iPad no editor de storyboard visual.

Então eu escrevi este pequeno script jig python para varrer o arquivo do storyboard para x, y, width, height e dimensionar tudo na proporção 320./768. Permitiu que eu me concentrasse apenas nos ajustes precisos.

  1. Copie seu storyboard do iPad em um novo arquivo. (por exemplo, iPhoneStoryboard.storyboard)

  2. Execute o script abaixo com o nome do arquivo do storyboard copiado como o primeiro parâmetro.

  3. Gerará o arquivo de saída com o sufixo _adjusted.storyboard (por exemplo, iPhoneStoryboard.storyboard_adjusted.storyboard)

Espero que ajude…

 import re import sys import math afile = sys.argv[1] scale = 320./768. number_pattern = '[-0-9]+(.[0-9]+)?' #width_pattern = 'width="[-0-9]+( ?px)?"' width_pattern = 'width="[-0-9]+(.[0-9]+)?( ?px)?"' height_pattern = 'height="[-0-9]+(.[0-9]+)?( ?px)?"' x_pattern = 'x="[-0-9]+(.[0-9]+)?( ?px)?"' y_pattern = 'y="[-0-9]+(.[0-9]+)?( ?px)?"' def replacescaledvalue(scale,pattern,sometext,replacefmt) : ip = re.search(pattern, sometext, re.IGNORECASE) if(ip) : np = re.search(number_pattern,ip.group(0)) if(np) : val = float(np.group(0)) val = int(math.floor(val*scale)) sval = replacefmt+str(val)+'"'#+'px"' newtext = re.sub(pattern,sval,sometext) return newtext else : return sometext fin = open(afile) fout = open(afile+"_adjusted.storyboard", "wt") for line in fin: newline = line newline = replacescaledvalue(scale,width_pattern,newline,'width="') newline = replacescaledvalue(scale,height_pattern,newline, 'height="') newline = replacescaledvalue(scale,x_pattern,newline, 'x="') newline = replacescaledvalue(scale,y_pattern,newline, 'y="') # print newline fout.write( newline ) fin.close() fout.close() 

Vá para o seu Target Summary e mude os dispositivos para universal, então desça e configure a versão do ipad para qualquer storyboard que você goste, incluindo um copiado e renomeado, se quiser.

Apenas como uma rápida nota para aqueles que podem ter tido o meu problema com isso:

Meu problema:

O conteúdo do storyboard copiado muito bem para um novo arquivo de placa que eu adicionei. No entanto, não colocaria as alterações no meu iPad provisionado. Percebendo que eu tive que mudar o storyboard designado para o alvo de compilation (veja imagem), mostre as mudanças.

Eu colocaria uma imagem se tivesse os pontos, mas a configuração está localizada em:

Navegador de projeto no menu de origem do lado esquerdo, alvo geral do projeto (painel central), guia geral, informações de implantação (segundo subtítulo), com a guia do botão do iPad selecionada.

De lá, escolha seu storyboard em “interface principal”.

Obrigado pelo post, espero que esta menção ajude um obstáculo em algum lugar.

Apenas por diversão, no XCode 5.1 e iOS 7.1 eu também precisei alterar os valores de “toolVersion” e “systemVersion” para isso:

 toolsVersion="5023" systemVersion="13A603" 

Sem isso, o novo arquivo de storyboard não compilaria

Usando as classs de tamanho XCode6, você não precisa mais converter o storyboard para o iPad. O mesmo Storyboard pode ser usado tanto para o iPhone quanto para o iPad, evitando que você mantenha dois arquivos atualizados.

O storyboard resultante é compatível com o iOS7 +.

Leia mais sobre isso aqui: https://developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/AboutAdaptiveSizeDesign.html#//apple_ref/doc/uid/TP40014436-CH6-SW1

Use classs de tamanho para permitir que um storyboard ou arquivo xib funcione com todos os tamanhos de canvas disponíveis. Isso permite que a interface do usuário do seu aplicativo funcione em qualquer dispositivo iOS.

Esta funcionalidade está agora incorporada. Por exemplo, se você alterar as configurações do projeto em Informações de implantação -> Dispositivos do iPhone para o Universal, a seguinte checkbox de diálogo será exibida:

insira a descrição da imagem aqui

Eu segui este tópico quando fui atingido com o mesmo problema ontem. Os passos que segui

  1. Para o Xcode 5.1, tive que fazer algumas limpezas no storyboard do iPhone, como a falta de reuseIdentifiers de células da tabela, fornecer identificação de story board para cada controlador, remover cenas não utilizadas.
  2. Copie MainStoryboard_iPhone.storyboard para MainStoryboard_iPad.storyboard.
  3. Usando o editor vi – mudou targetRuntime="iOS.CocoaTouch" para targetRuntime="iOS.CocoaTouch.iPad"
  4. Altere o código no MainStoryboard_iPad.storyboard de: para
  5. Abra o projeto no Xcode.
  6. Alterou os dispositivos de implantação para Universal – Escolha a opção de NÃO copiar o storyboard do iPhone.
  7. O Xcode padronizará o Alvo de Implementação para 7.1, cuidou das funções reprovadas.
  8. Para corrigir o erro de exibição de localização incorreta no Storyboard do iPad – Alterou o layout do quadro para os controladores com erros.

Foi tudo .. Obrigado a todos pela vossa ajuda ..

Para Xcode10

  1. Apenas duplicar Main.storyboard

  2. Em seguida, Main_iPad.storyboard arquivos para Main_iPad.storyboard e Main_iPone.storyboard

  3. Definir nomes apropriados em .plist

insira a descrição da imagem aqui

4. Basta selecionar o apropriado .storyboard para configurar insira a descrição da imagem aqui

A maneira mais fácil e confiável de fazer isso é copiar o colar do storyboard do iPad.

  1. Crie um novo storyboard e nomeie-o como MainStoryboard_ipad.
  2. Torne seu aplicativo um aplicativo Universal definindo a propriedade Devices como Universal na página Resumo das propriedades de destino do seu projeto. insira a descrição da imagem aqui
  3. Abra o storyboard do iPhone e selecione tudo e copie
  4. Abra o storyboard do iPad e cole.

Você terá que resize, mas pode ser mais rápido do que recriar todo o storyboard.

Existe uma solução realmente simples para as versões do Xcode que suportam classs de tamanho (testado no Xcode 7, que é a versão atual no momento da escrita). Marque a checkbox de seleção “use size classs” em um arquivo de storyboard ( File Inspector ), confirme o diálogo que aparece. Em seguida, desmarque a mesma checkbox de seleção – o Xcode perguntará se você deseja usar este storyboard com um iPhone ou iPad e converter as canvass apropriadamente. Não há necessidade de editar diretamente o arquivo do storyboard . Para iPad e iPhone, basta copiar o mesmo storyboard e configurar um para iPad e outro para iPhone usando o método descrito.

E antes que alguém sugira usar classs de tamanho – embora sejam ótimos, eles são menos convenientes para interfaces muito pesadas, como jogos, etc.

Uma abordagem diferente

  1. Adicione um Controlador de Visualização vazio com o Controlador de Navegação no iPad-Storyboard

  2. Mude a class para a class do seu primeiro ViewController usado para iPhone, “fooViewController”

  3. Adicione o Identificador de Storyboard no iPhone-Storyboard “fooViewController_storyboard_identifier” para o primeiro ViewController

  4. Vá para “fooViewController.m”

  5. Adicionar bool Variável bool nibWasLoadForIpad=false

  6. Vá para viewDidLoad

 if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && !nibWasLoadForIpad) { nibWasLoadForIpad=true; UIStoryboard* Storyboard_iphone=[UIStoryboard storyboardWithName:@"Main_iPhone" bundle: nil]; fooViewController *controller = [Storyboard_iphone instantiateViewControllerWithIdentifier:@"fooViewController_storyboard_identifier"]; [self.navigationController pushViewController:controller animated:YES]; self.modalPresentationStyle = UIModalPresentationCurrentContext; } 

(ps. Sabe o problema é que os fundos da vista será definido para branco)

Você deve criar um relatório de bug com a Apple. Você pode dizer que é uma cópia minha (10167030) que está aberta desde setembro de 2011. A coisa frustrante do meu ponto de vista é que o recurso existia no Xcode 3 …

Obrigado pelas respostas todos.

Segui os passos acima, mas quando corri o aplicativo no simulador ou no meu iPad, continuei usando apenas o storyboard do iPhone.

Por algum motivo, quando mudei o dispositivo de destino para Universal em vez de iPhone, o Xcode (v5.0) não atualizou o arquivo app-Info.plist para include o storyboard do iPad, então tive que adicionar manualmente a seguinte input ( usando o editor plist no Xcode):

Nome base do arquivo do storyboard principal (iPad) ==> MainStoryboard_iPad

Acabei de mudar (além da resposta de @tharkay):

   

e funciona muito bem!

Eu uso isso no XCode 8.3.3