- 開発技術
Swiftでのアプリ開発_ダイアログ画面のサイズ設定
- #XCode
- #モーダル画面
- #Storyboard
- #Swift

目次
Storyboard使用する場合のダイアログ画面のサイズ設定方法
【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc. 詳細はこちらから>
ダイアログ画面の種類のよって、Auto Layoutと制約を利用するのはアップルが推奨する方法ですが、アプリの仕様に満たさない場合、自分で設定しないといけない場面が開発現場ではよくあります。
今回の画面サイズについての要望は下記通りです。
|
1 2 |
ダイアログ画面のサイズは400×500 背後の画面を暗くしてダイアログ画面の周りを表示する。 |
この中、二番目の「背後の画面を暗くして表示する」要望は作業対象のダイアログ画面のStoryboardのAttributes InspectorでPresentationスタイルを.formSheetに設定すれば、実現できます。
ダイアログ画面のサイズは通常preferredContentSizeというプロパティにカスタマイズのサイズを設定することで実現できますが、実際これを設定しても反映されないことがあります。
画面サイズをカスタマイズするコードは下記通りです。
|
1 2 3 4 5 6 |
override func viewDidLoad() { super.viewDidLoad() // 例: 幅400px, 高さ500pxに設定 self.preferredContentSize = CGSize(width: 400, height: 500) self.isModelInPresentation = true } |
または、親画面のサイズの比率で設定する
|
1 2 3 4 5 6 7 8 9 10 11 12 |
override func viewDidLoad() { super.viewDidLoad() // 例: 幅90%, 高さ80%に設定 let widthPercentage: CGFloat = 0.90 let heightPercentage: CGFloat = 0.80 let screenWidth = UIScreen.main.bounds.width let screenHeight = UIScreen.main.bound.height let screenWidth = screenWidth * widthPercentage let screenHeight = screenHeight * heightPercentage self.preferredContentSize = CGSize(width: screenWidth, height: screenHeight) self.isModelInPresentation = true } |
preferredContentSizeの設定が画面サイズに反映されないのはなぜですか?
しかし、上記のようにコードで画面サイズを制御しても、全く反映されない場合があります。特にSegueで画面遷移を制御して設定したアプリの場合、Segueの設定がpreferredContenSizeの設定とバッティングし、preferredContentSizeの設定が効かないことがあります。
Storyboardでダイアログ画面の遷移元の画面とダイアログ画面の間の矢印を選択して、Attributes inspectorの中の「Kind」に「Present Modally」を設定し、「Presentation」に「Form Sheet」を設定します。こうすれば、preferredContentSizeの設定が効くことになります。Presentationの設定は本当に大事です。私は「Presentation」にデフォルト値の「Same As Destination」を設定していまして、preferredContentSizeが全く効きませんでした。
コードでサイズを設定しても効かない場合の確認方法
Storyboardの属性設定をまず確認する必要があります。対象の画面のStoryboardだけではなく、Main.storyboardもよく確認することが必須です。
【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>



