collectionViewにてセルを次のコードでラベルの文字列数によって変えるようにしていました。
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! TweetCell let height = cell.size(forWidth: view.frame.width).height return CGSize(width: view.frame.width, height: height + 72) }
cell.sizeはラベルの設定をしています。
func size(forWidth width: CGFloat) -> CGSize { captionLabel.lineBreakMode = .byWordWrapping captionLabel.translatesAutoresizingMaskIntoConstraints = false captionLabel.widthAnchor.constraint(equalToConstant: width).isActive = true return captionLabel.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize) }
しかし、このコードではセルがviewを更新するたびにラベルの大きさが変わったりするなどのエラーが発生していました。
そこでestimatedItemSizeだとセルのラベルは正常に文字列が全部表示されたのですが、次のコードで、上半分のレイアウトが中央に移ってしまいました。
private func setupCollectionViewLayout() { let layout = UICollectionViewFlowLayout() layout.minimumLineSpacing = 0.0 layout.invalidateLayout() layout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize collectionView.collectionViewLayout = layout }
原因はestimatedItemSizeで、消すと元に戻るのですが、セルのラベルが自動調整ができなくなってしまいます。
これらのコードを全て消し、sizeForItemAtで固定サイズで返すとなんのエラーも出てこないので、部品のオートレイアウトは問題ないと思います。
調べても、レイアウトが中央に移ってしまうエラーは出てこなかったので、もしご存知の方がいらっしゃれば、ご教授してくださると助かります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。