Konwersja Storyboard z iPhone na iPad

Mam iPhone aplikację, która ma storyboard. Teraz chcę również dostarczyć iPad aplikację. Zapytałem więc, czy istnieje funkcja, która pomaga mi przekształcić mój iPhone storyboard w iPad storyboard.

Konkretnie:

Czy istnieje podobna funkcja, czy jest tylko sposób ręczny ?

Author: dehlen, 2011-12-11

21 answers

Znalazłem coś w rodzaju rozwiązania:

  1. Zduplikuj swój iPhone-Storyboard i zmień jego nazwę MainStoryboard_iPad.storyboard

  2. Zamknij Xcode, a następnie otwórz ten plik w dowolnym edytorze tekstu.

  3. Wyszukaj targetRuntime="iOS.CocoaTouch" i zmień na targetRuntime="iOS.CocoaTouch.iPad"

  4. Zmień kod w MainStoryboard_iPad.storyboard from:

    <simulatedScreenMetrics key="destination" type="retina4"/> do

    <simulatedScreenMetrics key="destination"/>

  5. Teraz zapisz wszystko i ponownie otwórz Xcode. IPad-Storyboard ma taką samą zawartość jak iPhone-file, ale wszystko może zostać zdemaskowane.

To zaoszczędziło mi godziny-mam nadzieję, że to ci pomoże

 531
Author: tharkay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-24 17:19:15

Jeśli utworzyłeś uniwersalny projekt, domyślnie zostałby utworzony pusty storyboard iPada, wystarczy wybrać storyboard iPhone ' a select all (Command + A), skopiować (Command+C) i wkleić go na storyboard iPada. Upewnij się, że przed kompilacją przenieś punkt wejścia z pustego storyboardu do nowo skopiowanego storyboardu.

 60
Author: Malls,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-12 22:45:32

To mi nie pasowało. Zrobiłem coś trochę innego.

  1. Utwórz nowy plik tablicy historii dla wersji ipada
  2. Otwórz zarówno nowy plik, jak i plik, który chcę skopiować w texttwrangler (edytor tekstu)
  3. skopiowano tekst xml ze starego pliku do nowego pliku pomiędzy tymi znacznikami xml
  4. Pierwszy Znacznik <scenes> <!--Contents View Controller-->
  5. Wklej Tutaj
  6. Znaczniki Końca </class> </classes>
To mi pomogło. Mam nowy layout z podłączonymi wszystkimi gniazdami, który sam zaoszczędziłeś mi kilka godzin.
 10
Author: Nelson Brian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-13 21:55:07

Czytając wiele wątków na stackoverflow odkryłem rozwiązanie to -

1.Zduplikuj swój iPhone-Storyboard i zmień jego nazwę MainStoryboard_iPad.storyboard

2.kliknij prawym przyciskiem myszy na storyboard - > "Otwórz jako" - > "kod źródłowy".

3.Search for targetRuntime= " iOS.CocoaTouch "i zmień go na targetRuntime=" iOS.CocoaTouch.iPad "

5.Wyszukaj <simulatedScreenMetrics key="destination" type="retina4"/> i zmień na <simulatedScreenMetrics key="destination"/>

4.Teraz zapisz wszystko i kliknij prawym przyciskiem myszy na MainStoryboard_iPad.storyboard " open jako" ->"iOS StoryBoard" 5. być może będziesz musiał zmienić swoje ograniczenia. To wszystko, co zrobiłeś.

 8
Author: Bharat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-24 06:17:39
1. Create New Storyboard file with MainStoryboard_iPad.storyboard
2. Copy All the views from MainStoryboard and paste to MainStoryboard_iPad.storyboard
 8
Author: Kirit Vaghela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-05 06:22:22

1-Utwórz swoje "MainStoryboard_iPad.storyboard";

2 - Kliknij prawym przyciskiem myszy na ciebie "MainStoryboard_iPhone.storyboard" i "Otwórz jako - > kod źródłowy". Kopiuj wszystko;

3 - Kliknij prawym przyciskiem myszy na ciebie "MainStoryboard_iPad.storyboard" i "Otwórz jako - > kod źródłowy". Wklej wszystko. Teraz Szukaj i zmień:

  • 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-Zapisz. Teraz otwórz ponownie, ale za pomocą Kreatora interfejsów. Będziesz musiał tylko zmienić aranżację.

Ta metoda może być używana do .pliki xib too

 6
Author: Ricardo Anjos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-12 10:04:50

To idzie w drugą stronę, ale udało mi się zrobić select all & copy w moim iPad storyboard (~35 scen) i wkleić go do mojego iPhone storyboard. Rozmiary sceny zostały automatycznie dopasowane. Widziałem tylko dwa problemy, musiałem wymienić UISplitViewController (ponieważ to tylko iPad), a domyślne tło stało się przezroczyste zamiast szarego (nadal pracuje nad poprawnym naprawieniem, bez ręcznego ustawiania tła dla wszystkiego).

EDIT: wydaje się, że domyślne tło dla UITableView w Inspektorze atrybutów jest raczej dziwny. Musiałem ręcznie ustawić tło na "kolor tła widoku grupowego" dla grupowych widoków tabel i "Kolor Biały" Dla niezagrupowanych widoków tabel. Następnie był wyświetlany jako "domyślny" (zakładam, że wtedy dopasował wartość zakodowaną na twardo). -- Właściwie, jeszcze łatwiej, zmiana z "zgrupowane" na "Static" i powrót wydaje się resetować domyślny kolor.

 5
Author: Symmetric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-08 19:22:19

Oto coś, co zaoszczędziło mi godziny i może pomóc tym z Was, którzy znają się na Pythonie.

[1]} od dwóch miesięcy buduję aplikację, skupiającą się tylko na iPadu i ULEPSZAJĄCYM UX wraz z zespołem.

Dzisiaj skupiliśmy się na budowaniu wersji iPhone ' a, wykonaliśmy powyższe kroki (dzięki!) ale nie chciałem wtedy zmieniać rozmiaru wszystkich elementów interfejsu użytkownika z wymiarów iPada w edytorze wizualnych scenorysów.

Więc napisałem ten mały skrypt jig Pythona do skanowania przez storyboard plik dla x, y, szerokość, wysokość i skaluj wszystko w dół o współczynnik 320./768. Pozwoliło mi to skupić się na drobnych korektach.

  1. Skopiuj storyboard iPada do nowego pliku. (np. iPhoneStoryboard.storyboard)

  2. Uruchom poniższy skrypt z skopiowaną nazwą pliku storyboard jako pierwszym parametrem.

  3. Wygeneruje plik wyjściowy z sufiksem _adjusted.storyboard (np. iPhoneStoryboard.storyboard_adjusted.storyboard)

Nadzieja to pomaga...

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()
 4
Author: Chris Robertson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-15 23:32:46

Przejdź do podsumowania celu i zmień urządzenia na uniwersalne, następnie przejdź na dół i ustaw wersję iPada na dowolny storyboard, w tym skopiowaną i zmienioną nazwę, jeśli chcesz.

 3
Author: AMAN77,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-26 12:32:39

Tak jak szybka notka dla tych, którzy mogli mieć z tym problem:

Mój problem:

Zawartość storyboardu skopiowana ładnie do nowego pliku tablicy, który dodałem. Jednak nie wprowadziłoby to zmian w moim aprowizowanym iPadzie. Zauważając, że musiałem przełączyć wyznaczony storyboard dla celu kompilacji (patrz obraz), niech zmiany się pokażą.

Wrzuciłbym obrazek gdybym miał punkty, ale ustawienie znajduje się w:

Nawigator projektu po lewej stronie źródła menu, główny cel projektu (panel środkowy) karta Ogólne, (druga podgłówka) informacje o wdrożeniu, z zaznaczoną kartą przycisku iPada.

Stamtąd wybierz storyboard w obszarze " główny interfejs."

Dzięki za post, mam nadzieję, że ta wzmianka pomoże gdzieś.

 3
Author: dgetzin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-21 17:27:43

Dla zabawy, na XCode 5.1 i iOS 7.1 musiałem również zmienić wartości "toolVersion" i "systemVersion"na to:

toolsVersion="5023" systemVersion="13A603"

Bez tego nowy plik storyboard nie skompilowałby się

 3
Author: TooManyEduardos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-12 16:53:16

Używając klas rozmiarów XCode6 nie musisz już konwertować storyboardu na iPada. Ten sam Storyboard może być używany zarówno dla iPhone ' a, jak i iPada, oszczędzając Ci czasu na aktualizowaniu dwóch plików.

Powstały storyboard jest kompatybilny z iOS7+.

Czytaj więcej na ten temat tutaj: https://developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/AboutAdaptiveSizeDesign.html#//apple_ref/doc/uid/TP40014436-CH6-SW1

Użyj rozmiaru klasy umożliwiające pracę storyboardu lub pliku xib ze wszystkimi dostępnymi rozmiarami ekranu. Umożliwia to działanie interfejsu użytkownika aplikacji na dowolnym urządzeniu z systemem iOS.

 3
Author: Ciprian Rarau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-09 13:52:04

Ta funkcjonalność jest teraz wbudowana. Na przykład, jeśli zmienisz ustawienia projektu w Info o wdrożeniu - > Urządzenia z iPhone ' a na uniwersalne, pojawi się następujące okno dialogowe:

Tutaj wpisz opis obrazka

 2
Author: Freddie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-16 00:28:00

Śledziłem ten wątek, kiedy wczoraj dostałem ten sam problem. The steps I followed

  1. W przypadku Xcode 5.1 musiałem wyczyścić scenografię iPhone ' a, taką jak brakujące identyfikatory wielokrotnego wykorzystania komórek tabeli, podać identyfikator tablicy historii dla każdego kontrolera, usunąć nieużywane sceny.
  2. Copy MainStoryboard_iPhone.storyboard do MainStoryboard_iPad.storyboard.
  3. używanie edytora vi-zmieniono targetRuntime="iOS.CocoaTouch" na targetRuntime="iOS.CocoaTouch.iPad"
  4. Zmień kod w MainStoryboard_iPad.storyboard from: <simulatedScreenMetrics key="destination" type="retina4"/> to <simulatedScreenMetrics key="destination"/>
  5. Otwórz projekt w Xcode.
  6. zmieniono urządzenia wdrożeniowe na uniwersalne-wybrano opcję Nie kopiowania storyboardu iPhone ' a.
  7. Xcode będzie domyślnym celem wdrożenia 7.1, zajął się przestarzałymi funkcjami.
  8. aby naprawić błąd błędnie umieszczonego widoku w Ipad Storyboard-zmieniono układ ramki dla kontrolerów podając błędy.
To było to.. Dziękuję wszystkim za pomoc..
 2
Author: Shaina Prakash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-12 10:19:47

Dla Xcode10

  1. Just duplicate Main.storyboard

  2. Następnie zmień nazwy plików na Main_iPad.storyboard i Main_iPone.storyboard

  3. Ustaw odpowiednie nazwy w .plist

Tutaj wpisz opis obrazka

4.Po prostu wybierz właściwy .storyboard do konfiguracji Tutaj wpisz opis obrazka

 2
Author: Svitlana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-22 10:06:21

Najprostszym i najbardziej niezawodnym sposobem, aby to zrobić, jest skopiowanie Wklej z iPada storyboard.

  1. Utwórz nowy storyboard i nadaj mu nazwę MainStoryboard_ipad.
  2. uczyń swoją aplikację uniwersalną, ustawiając właściwość Devices na uniwersalną na stronie podsumowania właściwości docelowych dla Twojego projektu. Tutaj wpisz opis obrazka
  3. Otwórz storyboard iPhone ' a i wybierz wszystko i skopiuj
  4. Otwórz iPad storyboard i wklej.

You ' ll have to go about zmiana rozmiaru, ale może być szybsza niż odtworzenie całego storyboardu.

 1
Author: mcohen75,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-10 19:16:12

Istnieje naprawdę proste rozwiązanie dla wersji Xcode, które obsługują klasy wielkości (testowane w Xcode 7, który jest aktualną wersją w momencie pisania). Zaznacz pole wyboru "Użyj klas rozmiaru" na pliku storyboard (Inspektor Plików), potwierdź wyświetlone okno dialogowe. następnie odznacz to samo pole wyboru-Xcode zapyta cię, czy chcesz używać tego storyboardu z iPhonem lub ipadem i odpowiednio przekonwertować ekrany w nim. nie ma potrzeby bezpośredniego edytowania plik storyboard . Zarówno dla iPada, jak i iPhone 'a, po prostu skopiuj ten sam storyboard i skonfiguruj jeden dla iPada, a drugi dla iPhone' a za pomocą opisanej metody.

I zanim ktoś zaproponuje użycie klas wielkości - chociaż są świetne, są mniej wygodne dla mocno dostosowanych interfejsów, takich jak gry itp]}

 1
Author: GreatWiz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-21 02:47:05

Inne Podejście

  1. Dodaj pusty-Widok-Kontroler Z Nawigacją-Kontroler w Ipad-Storyboard

  2. Zmień klasę na klasę swojego pierwszego Viewcontrollera używanego dla iPhone ' a, "fooViewController"

  3. Dodaj Storyboard-Identifier w Storyboardzie iPhone ' a "fooViewController_storyboard_identifier" dla pierwszego ViewController

  4. Przejdź do "fooViewController.m "

  5. Dodaj zmienną bool bool nibWasLoadForIpad=false

  6. Przejdź do viewDidLoad - Metoda

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. Wiem, że problem polega na tym, że widok-tła będzie ustawiony na biały)

 1
Author: David from Studio.201,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-12 10:14:53

Powinieneś utworzyć Raport o błędzie za pomocą Apple. można powiedzieć, że to duplikat mojego (10167030), który jest otwarty od września 2011. Frustrujące rzeczy z mojego punktu widzenia jest to, że funkcja istniała w Xcode 3...

 0
Author: Stephen Darlington,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-04 15:05:38

Dzięki za odpowiedzi.

Wykonałem powyższe kroki, ale kiedy uruchomiłem aplikację pod symulatorem lub moim iPadem, nadal używałem tylko scenopisu iPhone ' a.

Z jakiegoś powodu, kiedy zmieniłem urządzenie docelowe, aby było uniwersalne zamiast iPhone ' a, Xcode (v5. 0) nie aktualizował informacji o aplikacji.plik plist, aby dołączyć iPad storyboard, więc musiałem ręcznie dodać następujący wpis (za pomocą edytora plist w Xcode):

Main storyboard file base name (iPad) = = > MainStoryboard_iPad

 0
Author: Pete,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-31 18:52:51

Po prostu zmieniam (dodatkowo odpowiedź od @tharkay):

 <device id="ipad9_7" orientation="landscape">
I działa świetnie !

Używam tego w XCode 8.3.3

 0
Author: Beto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-11 16:28:21