× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
iPhone6や6Plusが登場することにより、iOSデバイスの画面サイズ種類は
と6種類にも及ぶことになる。 ますますUseAutoLayoutを使いこなしていくことは重要になってくる。 UseAutoLayoutを使っていて、動的に指定したくなることがある。 そういう場合、UseAutoLayout自体を使わなくするという手もあるが、画面サイズの違いを吸収できなくなるので適切でない。 UseAutoLayoutのON/OFFはストーリーボード単位での指定になるので、別ストーリーボードに分けることで影響を絞る、という手もあるといえばある。 しかし、コードからレイアウト指定ができると便利になる。 その方法が 参考 に書いてあった。 公式リファレンスは以下を参照。 NSLayoutConstraintクラス AutoLayoutガイド なお、注意点をいくつか。 ・AutoLayoutによる配置が実行されるタイミング これは、viewWillAppearとviewDidAppearの間になる。 つまり、レイアウト制約の指定はviewDidLoadかviewWillAppearあたりでやっておけばいいということになる。 しかしそれは同時に、viewDidAppearまで各ビューのframe,boundsは信用できる値になっていないということでもある。 具体的に言うと、storyboard上で配置してある座標やサイズがそのまま入っていたりする。 その値を使って別のビューの座標やサイズを計算すると、思わぬずれが生じることになる。 storyboard上では、iPhone5Sのサイズで作っていることが多いだろう。だからiPhone5Sの実機やシミュレータで実行していると気付きにくい。別のサイズのデバイスで実行したときに発覚することになるだろう。 対処としては、viewDidAppear後に座標やサイズの計算をすればよい。しかし、一瞬(1フレーム?)計算前の状態でビューが表示されてしまう。 だから、そのビューはstoryboardに配置せずにコードで生成するようにするとか、初めはhiddenにしておくとかいう手間をかけておく必要がありそうだ。 それが面倒なら、viewDidLoadかviewWillAppearで、ということになるが、 その場合はビューの正確な位置をコード中で求めることになりそうだ。AutoLayoutの指定の中で、信用できる数字を使うことになる。例えばHeightを40に指定しているとか、親ビューからの相対座標をx=20にしている、とかそういう制約から計算することになる。 しかしこれはUseAutoLayoutと意味が二重になるのであまりうれしくない。 PR |
|||||||||||||||||||||
|