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〜〜」のサイズにすればよかったのですが、とんだ失敗をしてしまいした。
関連記事
-
-
iOS6時代のアプリのiOS7への対応
やや古い情報になるが、iOS7対応に関して自分がやったことの覚え書き。いろんな所から拾って来た情
-
-
CoreDataのソートとsectionNameKeyPathの関係
CoreDataをフェッチするときに、indexPathのsectionにできるsectionNam
-
-
UITableViewCellのロングタップ
UITableViewCellをロングタップしたときに、タップされたセルを認識しつつメニューを出した
-
-
Bitbucket課題の記法サンプル
Bitbucketの課題、およびwikiで利用できる記法についての記事です。 利用できる記法に
-
-
UIAutomation関連覚書
割りと忘れがちなので、自分用備忘録を兼ねて、UIAutomationに関連するtips的なものをまと
-
-
UIActionSheetの文字がブレて多重表示される
UIActionsheetを使っていて、iOS7/iPadの組み合わせで起こる不具合らしき挙動が起こ
-
-
User Defined Runtime Attributeについての覚書
UILabelに上下左右のパディングをつける方法を探して、結局「自分で以下のようなメソッドを持った拡
-
-
HTMLParserを修正する
HTMLスクレイピングしてる時に役立つライブラリであるObjective-C-HMTL-Parser
-
-
UIActionSheetが消えるときにキーボード表示/非表示通知が来る
UITextViewやUITextField編集中にアクションシートを表示すると、アクションシート
-
-
Xcode8で余計なログを抑制する
Xcode8に更新してから、妙にログが増えたので、NSLogで明示したのと実行時エラー以外のログを吐
