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〜〜」のサイズにすればよかったのですが、とんだ失敗をしてしまいした。
関連記事
-
-
CoreDataのソートとsectionNameKeyPathの関係
CoreDataをフェッチするときに、indexPathのsectionにできるsectionNam
-
-
UISegmentedControlに見栄え良く背景色を設定する
UISegmentedControlをiOS7で使おうとすると、基本の背景色が「透明」になりますが、
-
-
UITableViewのセクションヘッダをStoryboardで作る時の参考
UITableViewのセクションヘッダをカスタムして作る際に、セルと同様にプロトタイピングするため
-
-
メソッドの呼び出し元を調べる
特定のメソッドに関して、そのメソッドをコールしているメソッド群を調べるための手順。 (1)調べたい
-
-
iOS7でのPopover内サイズの指定
UIPopover内で表示する場合のViewControllerのコンテンツサイズ設定に関してのメモ
-
-
Xcode5.1のInterfaceBuilderにおける地味な変更点
iOS7.1に合わせてXcode5.1がリリースされました Xcode Release N
-
-
StoryboardからPopoverを作っても位置合わせコードは必要
これだけだとわかりづらいんですが。 XcodeのStoryboardから、Segueを"Prese
-
-
bitbucketをXcode5で使用する
bitbucketは無償で5人までの少人数チーム用のクローズド(非公開)リポジトリを作成できるため、
-
-
NSAttributedStringをローカライズする方法
NSAttributedStringをLocalizeするうまい方法はないものかと探したら、これが手