AutoLayoutで調整後オブジェクトの値を使用したい時に苦労したこと。
AutoLayoutで調整後オブジェクトの値を使用してうまくレイアウトしたかったけど 結局コードで書いた話。
環境
- Xcode7.2
- iOS9.2
- El Capitan
ViewControllerのライフサイクル
viewWillAppear
↓
viewDidLayoutSubviews
↓
viewDidAppear
今回やりたかったこと。
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で!と思って戦ったけどすごい時間取られてノックアウト。
未来の自分が同じ事で時間取られませんように。