ROADTO みちログ

ひとのみちのブログ。大阪でiOSアプリの道を歩くフリーランス。

AutoLayoutで調整後オブジェクトの値を使用したい時に苦労したこと。

AutoLayoutで調整後オブジェクトの値を使用してうまくレイアウトしたかったけど 結局コードで書いた話。

環境

  • Xcode7.2
  • iOS9.2
  • El Capitan

ViewControllerのライフサイクル

viewWillAppear

viewDidLayoutSubviews

viewDidAppear

今回やりたかったこと。

f:id:hitonomichi:20151225061832p:plain AutoLayoutを使用してオブジェクトを調整。
GrayViewとRedViewのwidthの比率が100:20になるよう指定して、
その調整後のRedViewの値でn個の同じViewを生成したい。

そしてRedViewの最下オブジェクトに合わせてGrayViewのheightを調整したい。
そしてGrayViewのheightに合わせて下のDarkGrayViewの位置を調整したい。

取得できる値

  • viewWillAppear → 調整前
  • viewDidLayoutSubviews → 調整前
  • viewDidAppear → 調整後

試行錯誤

viewDidAppearでRedViewの値を取得するしかありません。
viewDidAppearでRedViewの最下オブジェクトに合わせてGrayViewのheightの NSLayoutConstraintを指定しました。
viewDidAppearの後、再度viewDidLayoutSubviewsが呼ばれて、一見DarkGrayViewの位置が自動で調整されるかと思いきや、その時のGrayViewの値は調整前の値。。
なので自動で調整されません。。

結局

結局やったのはviewDidAppearでRedViewの値を基に上から下までコードで書く。
一瞬、調整前で表示されるため、調整後にhidden=NOにする、など変な回避策が必要となります。
なんか残念感ありますが、そういうもんだと割り切って終了することにします。

意地でもAutoLayoutで!と思って戦ったけどすごい時間取られてノックアウト。
未来の自分が同じ事で時間取られませんように。

自己紹介
メガネは売っていません
高浜 一道(たかはま かずみち)
大阪でiOSアプリの道を歩くフリーランス。
iPad・iPhoneとサーバを連携した、JSONやDBといったキーワードが出てくるツール系が多めです。
お仕事のご依頼やご連絡はこちらから。
お仕事ください!
Web : ROADTO
ML : k-takahama(a)roadto.jp

個人的なアカウントはこちら。
Tw : @hitonomichi
Fb : kazumichi.takahama