web-dev-qa-db-ja.com

ストーリーボードをiPhoneからiPadに変換する

ストーリーボードを持つiPhoneアプリケーションがあります。ここで、iPadアプリケーションも提供したいと思います。そこで、iPhoneストーリーボードをiPadストーリーボードに変換するのに役立つ関数があるかどうかを尋ねました。

具体的には:

同様の機能がありますか、それとも手動でしかありませんか?

216
dehlen

私は一種の解決策を見つけました:

  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"/> to

    <simulatedScreenMetrics key="destination"/>

  5. すべてを保存して、Xcodeを再度開きます。 iPad-StoryboardのコンテンツはiPhone-fileと同じですが、すべてが整理されない可能性があります。

これで時間を節約できました-うまくいけば、これがあなたを助けるでしょう

535
tharkay

ユニバーサルプロジェクトを作成した場合、デフォルトでは空のiPadストーリーボードが作成されますが、iPhoneストーリーボードを選択して(Command + A)、コピー(Command + C)してiPadストーリーボードに貼り付けるだけです。コンパイルする前に、エントリポイントを空のストーリーボードから新しくコピーしたストーリーボードに移動してください。

61
Malls

それは私にとってはうまくいきませんでした。私は少し違うことをしました。

  1. IPadバージョン用の新しいストーリーボードファイルを作成する
  2. 新しいファイルとコピーしたいファイルの両方をtextwrangler(テキストエディター)で開きます。
  3. これらのxmlタグの間にある古いファイルのXMLテキストを新しいファイルにコピーしました
  4. 最初のタグ<scenes> <!--Contents View Controller-->
  5. ここに貼り付け
  6. 終了タグ</class> </classes>

それは私のために働いた。すべてのコンセントを接続した状態で新しいレイアウトを作成し、それだけで数時間節約できました。

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

Stackoverflowの多くのスレッドを読んでから、私はソリューションが

1. iPhoneストーリーボードを複製し、名前を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を右クリックして「開く」->「IOS StoryBoard」5.制約を変更する必要がある場合もあります。これで完了です。

8
Bharat

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ファイルにも使用できます

6
Ricardo Anjos

これは逆の方法ですが、iPadストーリーボード(〜35シーン)ですべて選択してコピーし、iPhoneストーリーボードに貼り付けることができました。シーンのサイズは自動的に調整されました。私は2つの問題しか見ませんでした、UISplitViewControllerを交換しなければなりませんでした(iPadだけなので)、デフォルトの背景は灰色ではなく透明になりました(すべての背景を手動で設定することなく、それを適切に修正する作業を続けています)。

編集:属性インスペクタのUITableViewのデフォルトの背景はかなり奇妙だと思われます。グループ化されたテーブルビューの背景を「グループテーブルビューの背景色」に、グループ化されていないテーブルビューの「白色」に手動で設定する必要がありました。その後、「デフォルト」として表示されました(ハードコードされた値と一致したためだと思います)。 -実際には、さらに簡単に、「グループ化」から「静的」に変更して元に戻すと、デフォルトの色がリセットされるようです。

5
Symmetric

これは私を何時間も節約し、Pythonスキルを持つ人々を助けるかもしれないものです。

私は過去2か月間、iPadだけでチームとUXを反復処理することに焦点を当てたアプリを構築しています。

今日は、iPhoneバージョンの構築に焦点を当て、上記の手順に従いました(ありがとう!)。しかし、ビジュアルストーリーボードエディターでiPadの寸法からすべてのui要素のサイズを変更する必要はありませんでした。

そこで、この小さなpythonジグスクリプトを作成して、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()
4
Chris Robertson

これに関する私の問題を抱えていたかもしれない人々への簡単な注意事項として:

私の問題:

ストーリーボードのコンテンツは、追加した新しいボードファイルにうまくコピーされました。ただし、プロビジョニングされたiPadには変更が反映されません。ビルドターゲットの指定されたストーリーボード(画像を参照)を切り替える必要があることに気付いたので、変更が表示されました。

ポイントがあれば画像を投稿しますが、設定は次の場所にあります。

左側のソースメニューのプロジェクトナビゲータ、プロジェクトのルートターゲット(中央ペイン)の一般タブ、(2番目のサブヘッド)展開情報、iPadボタンタブが選択された状態。

そこから、「メインインターフェイス」の下でストーリーボードを選択します。

投稿をありがとう、私はこの言及がどこかにひっかかってくれることを願っています。

3
dgetzin

ターゲットサマリーに移動し、デバイスをユニバーサルに変更してから、下に移動して、必要に応じてコピーして名前を変更したストーリーボードなど、お好きなストーリーボードにiPadバージョンを設定します。

3
AMAN77

XCode6サイズクラスを使用すると、ストーリーボードをiPadに変換する必要がなくなります。同じStoryboardをiPhoneとiPadの両方で使用できるため、2つのファイルを最新に保つ必要がなくなります。

結果のストーリーボードは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
Ciprian Rarau

楽しみのために、XCode 5.1とiOS 7.1では、「toolVersion」と「systemVersion」の値を次のように変更する必要もありました。

toolsVersion="5023" systemVersion="13A603"

これがないと、新しいストーリーボードファイルはコンパイルされません。

3
TooManyEduardos

この機能は現在組み込まれています。たとえば、展開情報->デバイスのプロジェクト設定をiPhoneからユニバーサルに変更すると、次のダイアログが表示されます。

enter image description here

2
Freddie

昨日同じ問題に見舞われたとき、私はこのスレッドに従いました。私が従った手順

  1. Xcode 5.1では、テーブルセルの再利用識別子の欠落、すべてのコントローラーのストーリーボードIDの提供、未使用のシーンの削除など、iPhoneストーリーボードのクリーンアップを行う必要がありました。
  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はデフォルトでDeployment Targetを7.1にし、廃止予定の機能を処理しました。
  8. IPad Storyboardの見当違いの表示エラーを修正するには-エラーを与えるコントローラーのフレームレイアウトを変更しました。

それで終わりました。

2
Shaina Prakash

Xcode10の場合

  1. Main.storyboardを複製するだけです

  2. 次に、ファイルの名前をMain_iPad.storyboardおよびMain_iPone.storyboardに変更します

  3. .plistに適切な名前を設定します

enter image description here

4.設定する適切な.storyboardを選択するだけです enter image description here

2
Svitlana

これを行う最も簡単で信頼性の高い方法は、iPadストーリーボードからペーストをコピーすることです。

  1. 新しいストーリーボードを作成し、MainStoryboard_ipadのような名前を付けます。
  2. プロジェクトの[ターゲット]プロパティの[概要]ページで[デバイス]プロパティを[ユニバーサル]に設定して、アプリをユニバーサルアプリにします。 enter image description here
  3. IPhoneストーリーボードを開き、すべてを選択してコピーします
  4. IPadストーリーボードを開いて貼り付けます。

サイズを変更する必要がありますが、ストーリーボード全体を再作成するよりも高速です。

1
mcohen75

別のアプローチ

  1. IPad-StoryboardのNavigation-Controllerで空のView-Controllerを追加します

  2. クラスを、iPhoneで使用される最初のViewControllerのクラス「fooViewController」に変更します。

  3. 最初のViewControllerのiPhone-Storyboard "fooViewController_storyboard_identifier"にStoryboard-Identifierを追加します

  4. 「fooViewController.m」に移動します

  5. Bool変数bool 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。知っている問題は、ビューの背景が白に設定されることです)

サイズクラスをサポートするXcodeバージョンには、非常にシンプルなソリューションがあります(執筆時点で現在のバージョンであるXcode 7でテスト済み)。 チェック"use size classes"ストーリーボードファイルのチェックボックス(File Inspector)、確認表示されるダイアログ。 チェックを外す同じチェックボックス-Xcodeは、このストーリーボードをiPhoneまたはiPadで使用するかどうかを尋ね、画面を適切に変換します。 ストーリーボードファイルを直接編集する必要はありません。 iPadとiPhoneの両方で、同じストーリーボードをコピーし、説明されている方法を使用してiPad用とiPhone用に構成します。

そして、誰かがサイズクラスを使用することを提案する前に-すばらしい一方で、ゲームなどの高度にカスタマイズされたUIにはあまり便利ではありません

1
GreatWiz

Appleで バグレポートを作成する必要があります。 2011年9月からオープンしている私の複製(10167030)と言うことができます。私の視点は、機能がXcode 3に存在したということです...

0

みなさん、答えてくれてありがとう。

上記の手順に従いましたが、シミュレータまたはiPadでアプリを実行したとき、iPhoneストーリーボードを使用し続けました。

何らかの理由で、ターゲットデバイスをiPhoneではなくユニバーサルに変更したとき、Xcode(v5.0)はapp-Info.plistファイルを更新してiPadストーリーボードを含めなかったため、次のエントリを手動で追加する必要がありました( Xcodeでplistエディターを使用):

メインストーリーボードファイルのベース名(iPad)==> MainStoryboard_iPad

0
Pete

私はただ変更します(さらに@tharkayからの答えに):

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

そして素晴らしい作品!

XCode 8.3.3でこれを使用します

0
Beto