Size ClassとUIViewController.view
公開日:
:
最終更新日:2017/02/23
Tips Storyboard, UIViewController
タイトルの件でちょっとハマったことがある上に、特に日本語情報もStackOverflowからも情報が拾えなかったので記事化してみます。
Storyboard(やxib)でUIデザインをする場合、Size Classという概念を使うことができます。
これを使うことで、特定のSize Classの場合にはレイアウト制約〜〜を使う(使わない)、といったようなSize Classをキーにしたレイアウト制約のOn/Offや、そもそものコンポーネント単位でのOn/Off(例えばiPadなどの大きなのSize Classでのみ表示されるViewなどを用意する)を制御することができます。
この前振りで、ちょっとiPhone用のアプリを作っていて、一応将来を見込んで(?)iPhone向けのSize Class(「Compact Any」のサイズ)でUIデザインをしていました。
この後、この中のラベルやらボタンのテキストをスクレイプして、UILocalizedStringでローカライズしようと目論んで、UIViewController.view.subViewsに対して、ラベルやボタンであれば、元のtextをキーにしてNSLocalizedStringでローカライズ・・・
ということをしようと思ったのです。
(StoryboardのLocalizedでやらなかったのは、ローカライズ自体は今後自分がメンテしないので、Localization.stringに全部ローカライズをまとめたかった、というのがあります)
ところが、テストすると一向にLocalizeされない・・・調べてみると、そもそもUIViewController.viewにsubviewがないことになっているのです。
そこでふと思いついて、こんな実験をしてみました。
UIViewControllerを用意する
Size Class(Any Any)に、UIViewを置く
Size Class(Compact Any)に、UIButtonを置き、先ほどのUIViewは表示しないようにする
この状態で、iPhoneシミュレータからUIViewController.viewにあるサブビューを列挙させるプログラムを実行する。
結果、見事UIViewだけを見つけてくれました(正確にはUILaybotGuideという、レイアウトガイドクラスも出ますが、関係ないので省略してます)。
つまり、コードからは(Any Any)で存在しないViewは見つけてくれないんですね。
![]()
ということで、Interface BuilderのAttribute Inspector(スライダのようなアイコン)に、Size Classごとの表示を行うかどうかのチェックボックスがあるので、これの何もないやつ(全サイズでの表示制御)をチェックして回る作業が発生したのでした。
最初からAny Anyでやればよかったんですが、iPhone前提だとあの画面サイズのサイズ感がどうも・・・と思ってしまったんですよね。最初に表示するInitial View Controllerのサイズを「iPhone〜〜」のサイズにすればよかったのですが、とんだ失敗をしてしまいした。
関連記事
-
-
UIButtonのappearanceで派生する色設定
以下のコードでUIButtonのappearanceでBackgroundColorの設定をすると、
-
-
App Storeのページにアプリケーションから直接アクセスする方法
去年(2013年)の秋ごろ、iOS7の出始めの時期に書かれたblog記事などを参考にすると、iOS6
-
-
”No Scheme”になってしまった場合の対応
知人がXcodeで突然「No Scheme」表示になってRunするターゲットとデバイスが選択できない
-
-
AVAudioPlayerの初回再生遅延
ちょっとした効果音の再生にAVAudioPlayerを使っているのですが、どうも初回の効果音ロードの
-
-
UITableViewのセクションヘッダをStoryboardで作る時の参考
UITableViewのセクションヘッダをカスタムして作る際に、セルと同様にプロトタイピングするため
-
-
UIAlertControllerの取り扱い
旧聞ですが日本語版のStackOverflowが始動したようですね。 個人的な印象は「フィルタされ
-
-
WSCoachMarksViewをSwiftで使う場合の手順
Objective-Cで記述されてるライブラリ全般に当てはまることもあるんですが、個別でやることも含
-
-
preferredContentSizeをUINavigationContorllerのPop時に再設定する
popoverで表示しているViewControllerのサイズを、他のViewController
-
-
UITableViewCellのロングタップ
UITableViewCellをロングタップしたときに、タップされたセルを認識しつつメニューを出した
