忍者ブログ
  • 2024.10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 2024.12
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024/11/23 11:14 】 |
AutoLayoutをコードから指定
iPhone6や6Plusが登場することにより、iOSデバイスの画面サイズ種類は
機種画面サイズ縦横比
4,4S960x 6403:2
5,5S,5C1136x 640約16:9
61334x 750約16:9
6Plus1920x1080約16:9
iPad mini1024x 7684:3
iPad Retina/Air/mini Retina2048x15364:3

と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
【2014/09/11 18:42 】 | iPhone | 有り難いご意見(0)
<<cocos2d-xをバージョンアップする方法 | ホーム | A valid provisioning profile for this executable was not found>>
有り難いご意見
貴重なご意見の投稿














<<前ページ | ホーム | 次ページ>>