您好我尝试使用UICollection视图并让它们有多个布局。
当我使用swift / obj-cs setCollectionViewLayout(toLayout,animated:true);动画会重新排列单元格,但单元格中的项目会跳转到最终大小,而不是随着单元格逐渐增长,最终结果是看起来很糟糕的动画。
以下是我在两个布局之间切换:
{
override init()
{
super.init()
minimumLineSpacing = 20.0;
minimumInteritemSpacing = 0.0;
itemSize = CGSizeMake(80.0, 80.0)
sectionInset = UIEdgeInsetsMake(20.0, 60.0, 20.0, 60.0)
}
required init(coder: NSCoder) {
fatalError("NSCoding not supported")
}
另一个:
{
override init()
{
super.init()
minimumLineSpacing = 10.0;
minimumInteritemSpacing = 10.0;
itemSize = CGSizeMake(150.0, 150.0)
sectionInset = UIEdgeInsetsMake(20.0, 20.0, 20.0, 20.0)
}
required init(coder: NSCoder) {
fatalError("NSCoding not supported")
}
用于更改布局的代码:
func changeLayoutWithLayout(toLayout:UICollectionViewFlowLayout)
{
self.setCollectionViewLayout(toLayout, animated: true);
}
有没有让itemSize正确动画?或者为过渡创建我自己的自定义动画?我尝试使用batchupdates方法但是这给了我相同的结果,其中itemsize跳转到它的最终值。
答案 0 :(得分:1)
我发现UIColletionViewCell
和UIColletionViewCell.contentView
在setCollectionViewLayout(toLayout, animated: true)
调用的动画期间有不同的行为,当contentView
跳转到最终大小时,单元格的大小逐渐增大。
但是Apple建议内容视图是您应该添加单元格自定义内容的主视图。
答案 1 :(得分:0)
当您调用func changeLayoutWithLayout函数时,您可以尝试再次初始化layou。