使用swift无法正常工作的自定义集合视图单元格

时间:2015-09-02 01:56:53

标签: ios swift autolayout uicollectionview

我正在尝试使用可以自动调整大小的单元格创建集合视图。以前我使用过sizeForItemAtIndexPath但是无法使用referencedString获得完全适合textView的单元格高度。我决定放弃这种方法并使用自动调整大小的功能。我在这里找到了一些信息,但主要是使用Objective-C。我只熟悉Swift。即便如此,我已经完成了它并且仍然无法正常工作。

到目前为止,我所做的是在viewDidLoad中包含以下代码:

if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
    flowLayout.estimatedItemSize = CGSize(
        width: self.view.frame.size.width, height: 100)
}

单元格宽度正确显示,但无论内容如何,​​所有单元格高度都保持在100。

我还需要做些什么来让自动调整功能启动吗?我很确定我的故事板限制设置正确。

2 个答案:

答案 0 :(得分:1)

除了设置estimatedItemSize之外,您还应确保通过委托或数据源方法 提供项目大小。自我调整机制的要点是UIKit将使用估计的项目大小作为其初始估计,然后根据您在单元格的contentView上配置的自动布局约束来计算确切的高度。此外,您需要iOS 8或更高版本的Base SDK。

来自WWDC会议的这个回购reproduces Apple's example,他们引入了自定义单元格。

答案 1 :(得分:1)

一种解决方法可能是根据屏幕大小调整collectionView单元格的高度和宽度:

   func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {

        let deviceSize = UIScreen.mainScreen().bounds.size
        //let cellSize = sqrt(Double(deviceSize.width * deviceSize.height) / (Double(33)))

        let cellWidth = ((deviceSize.width / 2) - 10)
        let cellHeight = (deviceSize.height / 4)

        return CGSize(width: cellWidth , height: cellHeight)
    }
相关问题