스토리 보드를 iPhone에서 iPad로 변환


218

iPhone스토리 보드 가있는 응용 프로그램이 있습니다. 이제 iPad응용 프로그램도 제공하고 싶습니다 . 그래서 iPhone스토리 보드를 스토리 보드 로 변환하는 데 도움이되는 기능이 있는지 물었습니다 iPad.

구체적으로 :

비슷한 기능이 있습니까? 아니면 수동 방법 만 있습니까?


5
오, 고마워 내가 그들을 표시해야한다는 것을 몰랐다. 나는 또한 오래된 스레드 에서이 작업을 수행했습니다. 감사합니다.
dehlen

답변:


535

나는 일종의 해결책을 찾았다.

  1. iPhone-Storyboard를 복제하고 이름을 바꿉니다. MainStoryboard_iPad.storyboard

  2. Xcode를 닫은 다음 텍스트 편집기에서이 파일을여십시오.

  3. 검색하여 다음 targetRuntime="iOS.CocoaTouch"으로 변경targetRuntime="iOS.CocoaTouch.iPad"

  4. MainStoryboard_iPad.storyboard의 코드를 다음에서 변경하십시오.

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

    <simulatedScreenMetrics key="destination"/>

  5. 이제 모든 것을 저장하고 Xcode를 다시여십시오. iPad-Storyboard의 내용은 iPhone 파일과 동일하지만 모든 내용이 다를 수 있습니다.

이것은 시간을 절약 해 주었기를 바랍니다.


20
+1 가능하다면 내 명성에서 +100을 줄 것입니다. 훌륭한 조언! 내가 할 수 없었던 유일한 것은 Dashcode로 스토리 보드를 여는 것이므로 TextWrangler를 사용했습니다 (그러나 텍스트 편집기는 그렇게 할 것이라고 생각합니다). 감사!
Piotr Justyna

45
좋은 조언, 감사합니다. 여기에있는 동안 여기에서 직접 width = "320"을 width = "768", height = "480"을 height = "1024"등으로 변경하고 싶을 수도 있습니다. IB에서 요소별로 수행하는 것보다 훨씬 간단합니다.
Ben G

63
단순히 엑스 코드 내부 Dashcode는,도 textWrangler를 사용하지 마십시오 : 마우스 오른쪽 버튼을 클릭을 스토리 보드 -> "개방으로"- 사용을 제외하고 같은 일을 수행> "소스 코드", "인터페이스 빌더 - IOS 스토리 보드"
hokkuk

16
@PiotrJustyna 당신은 그렇게 할 수 있습니다. 를 눌러 start a bounty질문에서, 원하는 금액을 선택하고 Reward existing answer...
필립 라 델릭에게

33
: 아이 패드 형식도에서 MainStoryboard_iPad.storyboard의 코드를 변경 얻을 <simulatedScreenMetrics key="destination" type="retina4"/><simulatedScreenMetrics key="destination"/>
마커스 슈와 브

61

범용 프로젝트를 생성 한 경우 기본적으로 빈 iPad 스토리 보드가 생성 된 경우 iPhone 스토리 보드를 모두 선택 (Command + A)하고 복사 (Command + C) 한 다음 iPad 스토리 보드에 붙여 넣기 만하면됩니다. 컴파일하기 전에 진입 점을 빈 스토리 보드에서 새로 복사 한 스토리 보드로 이동하십시오.


9
최상의 답변, 쉬운 솔루션 및 최고 답변과 달리 나중에 인터페이스를 쉽게 수정할 수 있습니다. :)
Matt Reid

레이아웃은 어떻습니까?
tryKuldeepTanwar

10

그것은 저에게 효과적이지 않았습니다. 나는 조금 다른 것을했다.

  1. iPad 버전을위한 새로운 스토리 보드 파일 생성
  2. textwrangler (텍스트 편집기)에서 새 파일과 복사 할 파일을 모두 엽니 다.
  3. 이 XML 태그 사이에서 이전 파일의 XML 텍스트를 새 파일로 복사했습니다.
  4. 첫 번째 태그 <scenes> <!--Contents View Controller-->
  5. 여기에 붙여 넣기
  6. 끝 태그 </class> </classes>

그것은 나를 위해 일했다. 모든 콘센트가 연결된 새로운 레이아웃 아웃을 얻었으므로 혼자서 몇 시간을 절약했습니다.


1
+1 다른 사람들이 나를 위해 일하지 않았고 모든 것이 예상대로 작동합니다
Shereef Marzouk

4
Xcode 내에서이 작업을 수행 할 수 있습니다. .storyboard파일을 마우스 오른쪽 버튼으로 클릭 하고 클릭 Open As > Source Code하여 원시 XML을 봅니다.
Matt Kantor

8

stackoverflow에서 많은 스레드를 읽음으로써 해결책이 발견되었습니다.

1. iPhone-Storyboard를 복제하고 이름을 MainStoryboard_iPad.storyboard로 바꿉니다.

2. 스토리 보드를 마우스 오른쪽 버튼으로 클릭-> "다른 이름으로 열기"-> "소스 코드".

3. targetRuntime = "iOS.CocoaTouch"를 검색하고 targetRuntime = "iOS.CocoaTouch.iPad"로 변경하십시오.

5.로 검색 <simulatedScreenMetrics key="destination" type="retina4"/>하여 변경<simulatedScreenMetrics key="destination"/>

4. 이제 모든 것을 저장하고 MainStoryboard_iPad.storyboard“Open as”-> "IOS StoryBoard"를 마우스 오른쪽 버튼으로 클릭하십시오. 5. 제약 조건을 변경해야 할 수도 있습니다. 그게 다야


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

8

1-당신의 "MainStoryboard_iPad.storyboard";

2-당신을 마우스 오른쪽 버튼으로 클릭 "MainStoryboard_iPhone.storyboard"하고 "다른 이름으로 열기-> 소스 코드". 모든 것을 복사하십시오.

3- 당신을 마우스 오른쪽 버튼으로 클릭 "MainStoryboard_iPad.storyboard"하고 "다른 이름으로 열기-> 소스 코드". 모든 것을 붙여 넣습니다. 이제 검색 및 변경 :

  • 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-저장하십시오. 이제 인터페이스 빌더를 사용하여 다시여십시오. 재정렬 만하면됩니다.

이 방법은 .xib 파일에도 사용할 수 있습니다


1
이것이 최선의 방법입니다. 모든보기 및 구성 요소가 ipad 형식으로 크기 조정되기 때문입니다.
Ben

1
최신 버전의 ios7에서 type = "com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB"를 변경할 필요가 없습니다.
super9

5

이것은 다른 방식으로 진행되지만 iPad 스토리 보드 (~ 35 장면)에서 모두 선택 및 복사를 수행하여 iPhone 스토리 보드에 붙여 넣을 수있었습니다. 장면 크기가 자동으로 조정되었습니다. UISplitViewController를 교체 해야하는 두 가지 문제 만 보았습니다 (iPad 만 있기 때문에) 기본 배경은 회색 대신 투명하게되었습니다 (여전히 모든 배경을 수동으로 설정하지 않고 올바르게 수정하는 작업).

편집 : 속성 관리자에서 UITableView의 기본 배경이 다소 이상해 보입니다. 그룹화 된 테이블보기의 경우 배경을 "그룹 테이블보기 배경색"으로, 그룹화되지 않은 테이블보기의 경우 "흰색"으로 수동으로 배경을 설정해야했습니다. 그런 다음 "Default"로 표시되었습니다 (하드 코딩 된 값과 일치하므로 가정합니다). -실제로 "그룹화"에서 "정적"으로 변경 한 후 다시 기본 색상을 재설정하는 것이 훨씬 더 쉽습니다.


4

시간을 절약하고 파이썬 기술을 가진 사람들을 도울 수있는 것이 있습니다.

지난 2 개월 동안 팀과 함께 UX를 반복하는 iPad에 중점을 둔 앱을 개발했습니다.

오늘은 iPhone 버전을 만드는 데 중점을 두었고 위의 단계를 수행했습니다 (감사합니다!).하지만 비주얼 스토리 보드 편집기에서 iPad 크기의 모든 UI 요소 크기를 조정하고 싶지는 않았습니다.

그래서이 작은 파이썬 지그 스크립트를 작성하여 스토리 보드 파일을 통해 x, y, 너비, 높이를 스캔하고 비율을 320./768로 ​​축소합니다. 그런 다음 미세 조정에만 집중할 수있었습니다.

  1. iPad 스토리 보드를 새 파일로 복사하십시오. (예 : iPhoneStoryboard.storyboard)

  2. 복사 된 스토리 보드 파일 이름을 첫 번째 매개 변수로 사용하여 아래 스크립트를 실행하십시오.

  3. 접미사가 _adjusted.storyboard 인 출력 파일을 생성합니다 (예 : iPhoneStoryboard.storyboard_adjusted.storyboard)

그것이 도움이되기를 바랍니다 ...

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()

1
Chrish 안녕하세요, 저는 phython을 처음 사용합니다. 그래서 아이폰 스토리 보드를 iPad로 바꾸는 코드를 이해할 수 없습니다. 제발 도와주세요. 내 ipad 스토리 보드가 문제없이 iPhone 스토리 보드로 변환되고 있습니다. 하지만 iPhone 스토리 보드를 iPad로 변환해야합니다. 따라서 위의 스크립트에서 필요한 변경 사항이 있거나 iPhone을 ipad로 변환하는 스크립트를 공유 할 수 있습니다. 미리 감사드립니다.
Shubham

@Chris Robertson Chris, iPhone에서 iPad로이 스크립트를 사용하려면 'scale = 320./768'을 변경 하시겠습니까? 'scale = 768./320.'?
Charles Robertson

3

대상 요약으로 이동하여 장치를 범용으로 변경 한 다음 내려 가서 원하는 경우 복사 및 이름이 바뀐 것을 포함하여 원하는 스토리 보드로 ipad 버전을 설정하십시오.


3

이 문제에 대해 내 문제가 있었던 사람들에게 간단히 알려주십시오.

내 문제 :

스토리 보드 내용은 내가 추가 한 새로운 보드 파일로 멋지게 복사되었습니다. 그러나 프로비저닝 된 iPad에는 변경 사항이 적용되지 않습니다. 빌드 대상 (이미지 참조)에 대해 지정된 스토리 보드를 전환해야한다는 사실에 주목하면 변경 사항이 표시됩니다.

포인트가 있으면 이미지를 게시하지만 설정은 다음 위치에 있습니다.

왼쪽 소스 메뉴의 프로젝트 탐색기, iPad 버튼 탭이 선택된 프로젝트 (중앙 창) 일반 탭의 루트 대상 (제 2 부제목) 배치 정보.

거기에서 "메인 인터페이스"아래에서 스토리 보드를 선택하십시오.

게시물에 감사드립니다.이 언급이 어딘가에 걸리는 데 도움이되기를 바랍니다.


3

XCode 5.1 및 iOS 7.1에서는 "toolVersion"및 "systemVersion"의 값을 다음과 같이 변경해야했습니다.

toolsVersion="5023" systemVersion="13A603"

이것이 없으면 새로운 스토리 보드 파일은 컴파일되지 않습니다


3

XCode6 크기 클래스를 사용하면 스토리 보드를 더 이상 iPad로 변환 할 필요가 없습니다. 동일한 스토리 보드를 iPhone과 iPad 모두에 사용할 수 있으므로 두 파일을 최신 상태로 유지하지 않아도됩니다.

결과 스토리 보드는 iOS7 +와 호환됩니다.

이에 대한 자세한 내용은 https://developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/AboutAdaptiveSizeDesign.html#//apple_ref/doc/uid/TP40014436-CH6-SW1을 참조 하십시오.

스토리 보드 또는 xib 파일이 사용 가능한 모든 화면 크기에서 작동하도록하려면 크기 클래스를 사용하십시오. 이를 통해 앱의 사용자 인터페이스가 모든 iOS 기기에서 작동 할 수 있습니다.


3

Xcode10의 경우

  1. 그냥 복제 Main.storyboard

  2. 에 그런 다음 다시 이름의 파일 Main_iPad.storyboardMain_iPone.storyboard

  3. 적절한 이름을 설정하십시오 .plist

여기에 이미지 설명을 입력하십시오

4. 적절한 .storyboard를 선택하여 구성하십시오. 여기에 이미지 설명을 입력하십시오


2

이 기능은 이제 내장되어 있습니다. 예를 들어, 배포 정보-> 장치의 프로젝트 설정을 iPhone에서 범용으로 변경하면 다음 대화 상자가 나타납니다.

여기에 이미지 설명을 입력하십시오


3
Xcode의 버그 일 수는 있지만이 작업을 한 적이 없습니다. 결과 iPad 스토리 보드는 프로젝트에 추가되지 않으며 생성 된 것처럼 보이지 않습니다.
s73v3r

2

어제 같은 문제가 발생했을 때이 실을 따랐습니다. 내가 따르는 단계

  1. Xcode 5.1의 경우, 표 셀의 누락 된 reuseIdentifiers와 같은 iPhone 스토리 보드를 정리하고 모든 컨트롤러에 스토리 보드 ID를 제공하고 사용하지 않는 장면을 제거해야했습니다.
  2. MainStoryboard_iPhone.storyboard를 MainStoryboard_iPad.storyboard에 복사하십시오.
  3. VI 편집기를 사용하여 - 변경 targetRuntime="iOS.CocoaTouch"targetRuntime="iOS.CocoaTouch.iPad"
  4. MainStoryboard_iPad.storyboard 의 코드 를 다음 <simulatedScreenMetrics key="destination" type="retina4"/>에서<simulatedScreenMetrics key="destination"/>
  5. Xcode에서 프로젝트를 엽니 다.
  6. 배포 장치를 범용으로 변경했습니다. iPhone 스토리 보드를 복사하지 않는 옵션을 선택하십시오.
  7. Xcode는 배포 대상을 7.1로 기본 설정하고 더 이상 사용되지 않는 기능을 처리합니다.
  8. iPad 스토리 보드에서 잘못 배치 된보기 오류를 수정하려면-오류가 발생하는 컨트롤러의 프레임 레이아웃이 변경되었습니다.

그게 다야 .. 도와 줘서 고마워 ..


1

가장 쉽고 신뢰할 수있는 방법은 iPad 스토리 보드에서 붙여 넣기를 복사하는 것입니다.

  1. 새로운 스토리 보드를 만들고 MainStoryboard_ipad와 같은 이름을 지정하십시오.
  2. 프로젝트 대상 속성의 요약 페이지에서 장치 속성을 범용으로 설정하여 앱을 범용 앱으로 만듭니다. 여기에 이미지 설명을 입력하십시오
  3. iPhone 스토리 보드를 열고 모두 선택하고 복사하십시오
  4. iPad 스토리 보드를 열고 붙여 넣습니다.

크기를 조정해야하지만 전체 스토리 보드를 다시 만드는 것보다 빠를 수 있습니다.


1

크기 클래스를 지원하는 Xcode 버전에 대한 간단한 솔루션이 있습니다 (작성 당시의 현재 버전 인 Xcode 7에서 테스트 됨). 확인 "사용 크기 클래스" 스토리 보드 파일에 체크 박스를 ( 파일 관리자 ), 확인하는 대화 상자가 나타납니다. 그런 다음 동일한 확인란을 선택 취소하십시오 -Xcode는이 스토리 보드를 iPhone 또는 iPad와 함께 사용할 것인지 묻고 화면을 적절히 변환합니다. 스토리 보드 파일을 직접 편집 할 필요가 없습니다 . iPad와 iPhone 모두 동일한 스토리 보드를 복사하고 설명 된 방법을 사용하여 iPad 용과 iPhone 용으로 하나씩 구성하십시오.

그리고 누군가가 크기 클래스 사용을 제안하기 전에-훌륭하지만 게임 등과 같이 많이 사용자 정의 된 UI에는 덜 편리합니다.


1

다른 접근법

  1. iPad-Storyboard에서 Navigation-Controller가있는 빈 뷰 컨트롤러 추가

  2. 클래스를 iPhone에 사용 된 첫 번째 ViewController의 "fooViewController"클래스로 변경하십시오.

  3. 첫 번째 ViewController의 iPhone-Storyboard "fooViewController_storyboard_identifier"에 Storyboard-Identifier를 추가하십시오.

  4. "fooViewController.m"으로 이동

  5. 부울 변수 추가 부울 nibWasLoadForIpad=false

  6. 이동 viewDidLoad-Method

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. 문제는보기 배경이 흰색으로 설정된다는 것입니다.)


0

Apple 에서 버그 보고서를 작성해야합니다 . 2011 년 9 월 이후에 오픈 한 내 복제본 (10167030)이라고 말할 수 있습니다. 제 관점에서 볼 때 실망스러운 점은이 기능이 Xcode 3에 존재한다는 것입니다.


0

답변 해 주셔서 감사합니다.

위의 단계를 수행했지만 시뮬레이터 또는 iPad에서 응용 프로그램을 실행하면 iPhone 스토리 보드를 계속 사용했습니다.

어떤 이유로 대상 장치를 iPhone 대신 범용으로 변경했을 때 Xcode (v5.0)가 iPad 스토리 보드를 포함하도록 app-Info.plist 파일을 업데이트하지 않았으므로 다음 항목을 수동으로 추가해야했습니다 ( Xcode에서 plist 편집기 사용) :

메인 스토리 보드 파일 기본 이름 (iPad) ==> MainStoryboard_iPad


0

방금 변경했습니다 (@tharkay의 답변에 추가).

 <device id="ipad9_7" orientation="landscape">

그리고 잘 작동합니다!

XCode 8.3.3에서 이것을 사용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.