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のLocalizeに関するTips
Storyboardに設置したUIButtonのタイトルのLocalizeをしてたのですが、英語では
-
AVAudioPlayerの初回再生遅延
ちょっとした効果音の再生にAVAudioPlayerを使っているのですが、どうも初回の効果音ロードの
-
UIButtonのタイトル変更時のチラつき抑制
久しぶりにXcode+Objective-Cでアプリを作っていたら、UIButtonのタイトルを動的
-
viewDidLoadとviewDidLayoutSubviewsのタイミング
真実の記事にある「コードでiPhone6を識別する」話とほんのちょっとだけ繋がっている話で、view
-
コードでiPhone6 Plusを識別する簡単な方法
表題の通り、コードでiPhone6 Plusを識別する簡単な方法です。 iPhone6 Plu
-
HTMLParserを修正する
HTMLスクレイピングしてる時に役立つライブラリであるObjective-C-HMTL-Parser
-
iPad用storyboard⇔iPhone用Storyboardへの変換
iPad用アプリとしてiPad用前提のstoryboardから、iPhone対応にするにあたり、si
-
iOS7でのPopover内サイズの指定
UIPopover内で表示する場合のViewControllerのコンテンツサイズ設定に関してのメモ