UICollectionView
在 iOS12 的BUG,自动布局无效。
- 解决办法,在
reloadData
之后调用,比较复杂,刷新有时候有问题。
// view did load layout
DispatchQueue.main.async {
collectionView.collectionViewLayout.invalidateLayout()
}
- 直接在
viewWillLayoutSubviews
中使用
// view will layout subviews
collectionView.collectionViewLayout.invalidateLayout()
- 使用
UICollectionView
子类实现。最好最保险。
class CCAutoLayoutCollectionView: UICollectionView {
// once
private var shouldInvalidateLayout = false
override func layoutSubviews() {
super.layoutSubviews()
if shouldInvalidateLayout {
collectionViewLayout.invalidateLayout()
shouldInvalidateLayout = false
}
}
override func reloadData() {
shouldInvalidateLayout = true
super.reloadData()
}
}
navigationItem.titleView
在iOS13之前显示问题
- 重写内容布局
layoutFittingExpandedSize
class YGBarTitleView: UIView {
override var intrinsicContentSize: CGSize {
UIView.layoutFittingExpandedSize
}
}