2016年9月8日木曜日

iOS9/10のAutoresizeバグ

UI要素にautoresize設定をしていた場合、iOS8まではviewWillAppear時点でリサイズ後のサイズが取得できたけど、iOS9/10では得られなくなってしまった。

はっきり言ってこんなん仕様変更どころか完全にバグ。


回避策としては、1つはその上に乗せるものもすべてAutoresizeで制御するようにするとか、
KVOでframeの値に代入された時点で取り出すとか、viewDidAppearまで全要素をhiddenにしてサイズを取得、計算後にhiddenを解除するとかありそうだけど、うまくいくかどうかはわからない。

今回は、 最初の「上に載せるものすべてにAutoreseizeされるようする」で回避した。
   view.autoresizeMask=super.autoresizeMask;

Autoresizeはもう使うなということかもしれないけど、こっちのほうが圧倒的に楽。
Autolayoutも少しはわかるようになったけど、要素数が増えるともう管理しきれなくなる。
あんなもん設定するくらいなら、すべての座標とサイズをプログラムで書いたほうがマシ。
Appleには気合を入れて、もっとまともなリサイズ手法を考えてほしい。

viewDidLayoutSubviewsで検知できるという情報もあるが、以下の問題がある。
(1)複数回呼びだされることがある
(2).sizeは確定しているが、.originは未定のまま
なので従来のWillAppearからの単純移動ではうまくいかない。

KVOによる.frame監視も全く同様だった。

autoresizeMaskの設定だけではうまくいかない部分もあり、結局viewDidAppear後に取得し、アニメーションで表示することで見目の問題も回避した。

0 件のコメント:

コメントを投稿