概要
Xibの設定でハマったこと。
オートレイアウトをいくらいじってもビューのサイズが変更されない場合、以下の現象が発生している可能性がある。
以下の設定になっているとXibの親ビュー(UIView)のサイズが勝手に600pxにすり替わってくれるので、実行中に意図したサイズで処理されない。(僕の環境では600pxで固定でした)
前提
StoryboardかXibを使用してビューを構成していること。
該当のUIViewの"Simulated Metrics" -> "Size"の設定が"Inferred"になっていること。
修正方法
- Xib設定の"Simulated Metrics" -> "Size"を"Freeform"にする
- 親ビューをIBOutletを使って実装ファイルと紐付ける(ここではcontentViewとした)
- 適宜.mファイルの初期化処理等に以下をセットする
self.contentView.frame = CGRectMake(self.contentView.frame.origin.x,
self.contentView.frame.origin.y,
[UIScreen mainScreen].bounds.size.width,
self.contentView.frame.size.height);
所感
Simulated Metricsの仕様が掴めてなかったので苦労した。このプロパティをInferredにしてしまっているとフレームの調整を勝手にXcodeがやってしまうみたいです。明示的にフレームを指定することで改善されました。この例ではデバイスの幅を設定しましたが、縦の長さについても同様のようです。
なぜかXcode8にバージョンアップ後のXibのコンバート作業で発生しました。