ストーリーボードを持つiPhone
アプリケーションがあります。ここで、iPad
アプリケーションも提供したいと思います。そこで、iPhone
ストーリーボードをiPad
ストーリーボードに変換するのに役立つ関数があるかどうかを尋ねました。
具体的には:
同様の機能がありますか、それとも手動でしかありませんか?
私は一種の解決策を見つけました:
IPhone-Storyboardを複製し、名前をMainStoryboard_iPad.storyboard
に変更します
Xcodeを閉じてから、このファイルをテキストエディターで開きます。
targetRuntime="iOS.CocoaTouch"
を検索し、targetRuntime="iOS.CocoaTouch.iPad"
に変更します
MainStoryboard_iPad.storyboardのコードを次から変更します。
<simulatedScreenMetrics key="destination" type="retina4"/>
to
<simulatedScreenMetrics key="destination"/>
すべてを保存して、Xcodeを再度開きます。 iPad-StoryboardのコンテンツはiPhone-fileと同じですが、すべてが整理されない可能性があります。
これで時間を節約できました-うまくいけば、これがあなたを助けるでしょう
ユニバーサルプロジェクトを作成した場合、デフォルトでは空のiPadストーリーボードが作成されますが、iPhoneストーリーボードを選択して(Command + A)、コピー(Command + C)してiPadストーリーボードに貼り付けるだけです。コンパイルする前に、エントリポイントを空のストーリーボードから新しくコピーしたストーリーボードに移動してください。
それは私にとってはうまくいきませんでした。私は少し違うことをしました。
<scenes> <!--Contents View Controller-->
</class> </classes>
それは私のために働いた。すべてのコンセントを接続した状態で新しいレイアウトを作成し、それだけで数時間節約できました。
1. Create New Storyboard file with MainStoryboard_iPad.storyboard
2. Copy All the views from MainStoryboard and paste to MainStoryboard_iPad.storyboard
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.制約を変更する必要がある場合もあります。これで完了です。
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ファイルにも使用できます
これは逆の方法ですが、iPadストーリーボード(〜35シーン)ですべて選択してコピーし、iPhoneストーリーボードに貼り付けることができました。シーンのサイズは自動的に調整されました。私は2つの問題しか見ませんでした、UISplitViewControllerを交換しなければなりませんでした(iPadだけなので)、デフォルトの背景は灰色ではなく透明になりました(すべての背景を手動で設定することなく、それを適切に修正する作業を続けています)。
編集:属性インスペクタのUITableViewのデフォルトの背景はかなり奇妙だと思われます。グループ化されたテーブルビューの背景を「グループテーブルビューの背景色」に、グループ化されていないテーブルビューの「白色」に手動で設定する必要がありました。その後、「デフォルト」として表示されました(ハードコードされた値と一致したためだと思います)。 -実際には、さらに簡単に、「グループ化」から「静的」に変更して元に戻すと、デフォルトの色がリセットされるようです。
これは私を何時間も節約し、Pythonスキルを持つ人々を助けるかもしれないものです。
私は過去2か月間、iPadだけでチームとUXを反復処理することに焦点を当てたアプリを構築しています。
今日は、iPhoneバージョンの構築に焦点を当て、上記の手順に従いました(ありがとう!)。しかし、ビジュアルストーリーボードエディターでiPadの寸法からすべてのui要素のサイズを変更する必要はありませんでした。
そこで、この小さなpythonジグスクリプトを作成して、x、y、幅、高さについてストーリーボードファイルをスキャンし、すべてを320./768の比率で縮小しました。その後、微調整に集中することができました。
IPadストーリーボードを新しいファイルにコピーします。 (例:iPhoneStoryboard.storyboard)
コピーされたストーリーボードのファイル名を最初のパラメーターとして以下のスクリプトを実行します。
サフィックス_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()
これに関する私の問題を抱えていたかもしれない人々への簡単な注意事項として:
私の問題:
ストーリーボードのコンテンツは、追加した新しいボードファイルにうまくコピーされました。ただし、プロビジョニングされたiPadには変更が反映されません。ビルドターゲットの指定されたストーリーボード(画像を参照)を切り替える必要があることに気付いたので、変更が表示されました。
ポイントがあれば画像を投稿しますが、設定は次の場所にあります。
左側のソースメニューのプロジェクトナビゲータ、プロジェクトのルートターゲット(中央ペイン)の一般タブ、(2番目のサブヘッド)展開情報、iPadボタンタブが選択された状態。
そこから、「メインインターフェイス」の下でストーリーボードを選択します。
投稿をありがとう、私はこの言及がどこかにひっかかってくれることを願っています。
ターゲットサマリーに移動し、デバイスをユニバーサルに変更してから、下に移動して、必要に応じてコピーして名前を変更したストーリーボードなど、お好きなストーリーボードにiPadバージョンを設定します。
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デバイスで動作できるようになります。
楽しみのために、XCode 5.1とiOS 7.1では、「toolVersion」と「systemVersion」の値を次のように変更する必要もありました。
toolsVersion="5023" systemVersion="13A603"
これがないと、新しいストーリーボードファイルはコンパイルされません。
この機能は現在組み込まれています。たとえば、展開情報->デバイスのプロジェクト設定をiPhoneからユニバーサルに変更すると、次のダイアログが表示されます。
昨日同じ問題に見舞われたとき、私はこのスレッドに従いました。私が従った手順
targetRuntime="iOS.CocoaTouch"
をtargetRuntime="iOS.CocoaTouch.iPad"
に変更<simulatedScreenMetrics key="destination" type="retina4"/>
から<simulatedScreenMetrics key="destination"/>
に変更しますそれで終わりました。
これを行う最も簡単で信頼性の高い方法は、iPadストーリーボードからペーストをコピーすることです。
サイズを変更する必要がありますが、ストーリーボード全体を再作成するよりも高速です。
IPad-StoryboardのNavigation-Controllerで空のView-Controllerを追加します
クラスを、iPhoneで使用される最初のViewControllerのクラス「fooViewController」に変更します。
最初のViewControllerのiPhone-Storyboard "fooViewController_storyboard_identifier"にStoryboard-Identifierを追加します
「fooViewController.m」に移動します
Bool変数bool nibWasLoadForIpad=false
を追加
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にはあまり便利ではありません
Appleで バグレポートを作成する必要があります。 2011年9月からオープンしている私の複製(10167030)と言うことができます。私の視点は、機能がXcode 3に存在したということです...
みなさん、答えてくれてありがとう。
上記の手順に従いましたが、シミュレータまたはiPadでアプリを実行したとき、iPhoneストーリーボードを使用し続けました。
何らかの理由で、ターゲットデバイスをiPhoneではなくユニバーサルに変更したとき、Xcode(v5.0)はapp-Info.plistファイルを更新してiPadストーリーボードを含めなかったため、次のエントリを手動で追加する必要がありました( Xcodeでplistエディターを使用):
メインストーリーボードファイルのベース名(iPad)==> MainStoryboard_iPad
私はただ変更します(さらに@tharkayからの答えに):
<device id="ipad9_7" orientation="landscape">
そして素晴らしい作品!
XCode 8.3.3でこれを使用します