traitCollection 更改时更改单元格布局
Change cell layout when traitCollection changes
当水平尺寸 class 发生变化时,我在调整单元格布局时遇到问题。
我的单元格有一个 stackView,我希望紧凑尺寸的轴是水平的 class,常规尺寸的轴是垂直的。
这是我试过的:
override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
if previousTraitCollection?.horizontalSizeClass != traitCollection.horizontalSizeClass {
self.collectionView?.reloadData()
}
}
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell
switch traitCollection.horizontalSizeClass {
case .Compact:
cell.stackView.axis = .Horizontal
default:
cell.stackView.axis = .Vertical
}
return cell
}
但结果是并非所有单元格都更新了它们的布局,请查看下面的 gif。
编辑:
我已经通过在 cellForItem
和单元格 class 本身中打印来确认轴已正确更改。所以问题似乎是单元格没有重绘..
有什么解决办法的建议吗?
将对 layoutIfNeeded()
的调用添加到 cellForItemAtIndexPath
方法,以便让堆栈视图重新布局其内容:
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell
switch traitCollection.horizontalSizeClass {
case .Compact:
cell.stackView.axis = .Horizontal
default:
cell.stackView.axis = .Vertical
}
cell.stackView.layoutIfNeeded()
return cell
}
当水平尺寸 class 发生变化时,我在调整单元格布局时遇到问题。
我的单元格有一个 stackView,我希望紧凑尺寸的轴是水平的 class,常规尺寸的轴是垂直的。
这是我试过的:
override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
if previousTraitCollection?.horizontalSizeClass != traitCollection.horizontalSizeClass {
self.collectionView?.reloadData()
}
}
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell
switch traitCollection.horizontalSizeClass {
case .Compact:
cell.stackView.axis = .Horizontal
default:
cell.stackView.axis = .Vertical
}
return cell
}
但结果是并非所有单元格都更新了它们的布局,请查看下面的 gif。
编辑:
我已经通过在 cellForItem
和单元格 class 本身中打印来确认轴已正确更改。所以问题似乎是单元格没有重绘..
有什么解决办法的建议吗?
将对 layoutIfNeeded()
的调用添加到 cellForItemAtIndexPath
方法,以便让堆栈视图重新布局其内容:
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell
switch traitCollection.horizontalSizeClass {
case .Compact:
cell.stackView.axis = .Horizontal
default:
cell.stackView.axis = .Vertical
}
cell.stackView.layoutIfNeeded()
return cell
}