これだ!っていう解決策ではないですが、確認することメモメモです。
UICollectionViewで左寄せの可変セルを実装しようとしていました。
UICollectionViewFlowLayoutはサブクラスを作って、「UICollectionViewでタグが左寄せに並んでいるようなレイアウトを実現する -Qiita」をそのまま使わせていただき実装。
可変セルは、xibを用いてAutoLayoutを設定し、実装。
しかし何故かiOS9でのみ無限ループに陥ってクラッシュ。(iOS10,iOS11ではちゃんと動く)
最初の1つ目はサイズの計算ができているんですが、2つ目以降は計算ができないのか、そこで落ちてしまいます。
色々調べてたどり着いたのがこちら
ここの回答に、
1. Before self-sizing cell
2. Validated self-sizing cell again after other cells recalculated.
3. Did changed self-sizing cell
If second steps can't get stable all cells' position and size, it will become infinite loop.
と書かれていまして。まさしくこれだー
つまりはAutoLayoutが上手くできてないから再計算できないぞ!!ってことです。
なのでAutoLayoutあたりをとにかく確認してみました。
その時セル上のラベルについていた制約が、
・縦横それぞれの真ん中に来るやつ
・上下左右のmarginを固定
でした。
コード上ではestimatedItemSizeを書いておいて、これでiOS11とiOS10ではなんの問題もなく動いていました。
iOS10ではレイアウト変えるときにcollectionViewLayout.invalidateLayout()を呼んでないとクラッシュすることがあるので書いてあります。具体的にはreloadDataをした後です。この件に関しては、【Swift3】UICollectionViewで「Assertion Failure in [UICollectionViewData:invalidateItemsPaths] ~~」が出たときの対処にも書いてまする。
AutoLayoutに関しては、約2年前に最初にiOS開発を始めたときに技術書読んで使った以来ほぼ使っていなかったので、その時の知識だけでやっている初心者です。
なのでもうね〜〜〜よくわからんけどいじってみるしかないな〜ってことで色々いじってはビルドして落ちて、何故か急に落ちなくなったと思ったらセル5つくらいで落ちて????ってなってを繰り返しまして。
もう投げようとした矢先に急に落ちなくなった。わけがわからん。
結局最終的にセル上のラベルについていた制約は、
・Y軸の中心にくるやつ(X軸の方を外した)
・上下左右のマージン
・width >= 10
で動くようになりました。
んでこれで動くようになったわけなんですが、なんか知らんが可変じゃなくなったんですよね。もう本当にわけがわからん。
結局、そのラベルに合わせてセルの方をIB上で縮めてやったら可変になりました。謎い
■[■■ラベル■■]■ となっていたのを
■[ラベル]■にしてやっただけなんですけどね。■は空白ですよ。
とにかく無限ループに陥ってどうやらは、恐らく
collectionViewLayout.invalidateLayout()もリロード後に書いてあるので、それも必要かもしれないです。確認はしてないですけど。
しかし本当にわけわからんでござる。OSがあがるにつれて推測能力(?)あがってんだろうな┐(´-`)┌ 進化を感じる
ではでは。
Additional Notes追記
AutoLayout無理・・・
コメントはありません。
現在コメントフォームは工事中です。