iPhone
ストーリーボードのあるアプリケーションがあります。次に、iPad
アプリケーションも提供したいと思います。それで、iPhone
ストーリーボードをストーリーボードに変換するのに役立つ機能があるかどうか尋ねましたiPad
。
具体的には:
同様の機能はありますか、手動の方法しかありませんか?
iPhone
ストーリーボードのあるアプリケーションがあります。次に、iPad
アプリケーションも提供したいと思います。それで、iPhone
ストーリーボードをストーリーボードに変換するのに役立つ機能があるかどうか尋ねましたiPad
。
具体的には:
同様の機能はありますか、手動の方法しかありませんか?
回答:
私は一種の解決策を見つけました:
iPhoneストーリーボードを複製して名前を変更する MainStoryboard_iPad.storyboard
Xcodeを閉じてから、このファイルをテキストエディタで開きます。
検索しtargetRuntime="iOS.CocoaTouch"
て次のように変更しますtargetRuntime="iOS.CocoaTouch.iPad"
MainStoryboard_iPad.storyboardのコードを次のように変更します。
<simulatedScreenMetrics key="destination" type="retina4"/>
に
<simulatedScreenMetrics key="destination"/>
すべてを保存して、Xcodeを再度開きます。iPad-StoryboardのコンテンツはiPhone-fileと同じですが、すべてが乱れる可能性があります。
これは私に時間を節約しました-うまくいけばこれはあなたを助けるでしょう
start a bounty
質問の下を押して、必要な量を選択し、Reward existing answer
...
<simulatedScreenMetrics key="destination" type="retina4"/>
に<simulatedScreenMetrics key="destination"/>
ユニバーサルプロジェクトを作成した場合、デフォルトで空のiPadストーリーボードが作成されます。iPhoneストーリーボードを選択してすべてを選択し(Command + A)、コピーして(Command + C)、iPadストーリーボードに貼り付けます。コンパイルする前に、エントリポイントを空のストーリーボードから新しくコピーしたストーリーボードに移動してください。
それは私にはうまくいきませんでした。私は少し違うことをしました。
<scenes> <!--Contents View Controller-->
</class> </classes>
それでうまくいきました。すべてのコンセントが接続された新しいレイアウトアウトを取得しましたが、それだけで数時間を節約できました。
.storyboard
ファイルを右/コントロールでクリックし、クリックOpen As > Source Code
して生のXMLを表示します。
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"
、「Open as-> Source Code」を開きます。すべてをコピーします。
3-あなた"MainStoryboard_iPad.storyboard"
を右クリックして、「Open as-> Source Code」としてください。すべてを貼り付けます。今すぐ検索して変更:
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ボタンのタブが選択されています。
そこから、「メインインターフェース」でストーリーボードを選択します。
投稿に感謝します。この言及がどこかで問題を解決することを願っています。
面白くするために、XCode 5.1およびiOS 7.1では、「toolVersion」と「systemVersion」の値を次のように変更する必要もあります。
toolsVersion="5023" systemVersion="13A603"
これがないと、新しいストーリーボードファイルはコンパイルされません。
XCode6サイズクラスを使用すると、ストーリーボードをiPadに変換する必要がなくなります。同じストーリーボードを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デバイスで機能させることができます。
この機能は現在組み込まれています。たとえば、Deployment Info-> Devicesのプロジェクト設定をiPhoneからUniversalに変更すると、次のダイアログが表示されます。
私は昨日同じ問題に見舞われたときにこのスレッドをフォローしました。私が従ったステップ
targetRuntime="iOS.CocoaTouch"
へtargetRuntime="iOS.CocoaTouch.iPad"
<simulatedScreenMetrics key="destination" type="retina4"/>
に<simulatedScreenMetrics key="destination"/>
それはそれだった…あなたの助けをありがとう。
サイズクラスをサポートするXcodeバージョンの本当に簡単な解決策があります(執筆時点での現在のバージョンであるXcode 7でテスト済み)。チェック「使用サイズクラス」ストーリーボードファイル上のチェックボックス(ファイルインスペクタを)、確認ダイアログが表示されていること。次に、同じチェックボックスをオフにします。Xcodeは、このストーリーボードをiPhoneまたはiPadで使用するかどうかを尋ね、画面を適切に変換します。ストーリーボードファイルを直接編集する必要はありません。iPadとiPhoneの両方で、同じストーリーボードをコピーし、説明されている方法を使用して、iPad用とiPhone用の両方を構成します。
そして、誰かがサイズクラスの使用を提案する前に-素晴らしいですが、ゲームなどの大幅にカスタマイズされたUIには不便です
iPad-StoryboardにNavigation-Controllerを含む空のView-Controllerを追加する
クラスを、iPhoneで使用する最初のViewControllerのクラス「fooViewController」に変更します。
最初のViewControllerのiPhone-Storyboard "fooViewController_storyboard_identifier"にStoryboard-Identifierを追加します
「fooViewController.m」に移動します
ブール変数ブールを追加 nibWasLoadForIpad=false
- 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。既知の問題は、ビューの背景が白に設定されることです)
Appleでバグレポートを作成する必要があります。これは、2011年9月からオープンしている私の(10167030)の複製だと言えます。私の観点からは、この機能がXcode 3に存在していたことがイライラします...