Lar*_*sJK 1 ios uicollectionview size-classes adaptive-layout
当水平尺寸等级改变时,我在调整单元格的布局时遇到问题。
我的单元格有一个 stackView,我希望轴对于 Compact size 类是 Horizontal,对于Regular 是 Vertical。
这是我尝试过的:
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
}
Run Code Online (Sandbox Code Playgroud)
但结果是并非所有单元格都会更新其布局,请参见下面的 gif。
编辑:
我已经确认通过cellForItem在单元格类本身中和中打印来正确更改轴。所以问题似乎是单元格没有重绘..
任何建议我应该如何解决这个问题?
添加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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6056 次 |
| 最近记录: |