从故事板混合单元格并以编程方式创建单元格

时间:2016-03-24 14:32:14

标签: ios swift uicollectionview

我在故事板中有集合视图。我在故事板中有一部分单元格,我以编程方式创建了一部分单元格。我应该在sizeForItemAtIndexPath方法中做些什么?我应该返回哪个值?对于我以编程方式创建的单元格,我为他返回大小。但我不希望故事板中的单元格从故事板中复制大小。我的意思是,我有:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
      return self.viewModels[indexPath.item].viewSize // for programmatically created cells
}

在viewModel类中:

class ViewModel {
    var viewSize:CGSize = CGSizeMake(50, 50)//for example
}

另外,我在故事板中设置了故事板和大小的单元格。例如,我在故事板中有5个不同的单元格,每个单元格的大小不同。我该怎么办?

 let viewModel = self.viewModels[indexPath.item]
 if viewModel.id == "CELL_1" { return CGSizeMake(10, 10) }
 else if viewModel.id == "CELL_2" { return CGSizeMake(20, 20) }
 //and so on

我不想这样:( 您是否知道解决方案如何从故事板获取项目大小或在未实现此方法时创建行为? (我的意思是,如果你没有实现这个方法,那么集合视图将从故事板中获得大小)

1 个答案:

答案 0 :(得分:0)

您可以使用其重用ID实例化单元格并调用:

cell.setNeedsLayout()
cell.layoutIfNeeded()

然后访问单元格的框架以获得它的实际大小。