我的单元格是正方形的,无论大小如何都很好看。我正在寻找单元格的最大尺寸,以便显示所有单元格都不需要滚动。

举例来说,此屏幕快照非常适合3个玩家,但是将其踢到12个玩家会使他们滚动出界,这是可以避免的。

有没有办法做到这一点?

最佳答案

基于上面的rdelmar代码,并剔除了所有技巧。蛮力计算可确保在某些边缘情况下提供正确答案,而在其他情况下失败。

使用二进制搜索以提高效率。

// Make the cells fit
override func viewDidLayoutSubviews() {
    var highestWorking = 0
    var lowestNotWorking = 9999
    while lowestNotWorking > highestWorking + 1 {
        let currentTest = (highestWorking + lowestNotWorking) / 2
        let cols = Int(playerPhotoCollectionView.frame.size.width + 10) / (currentTest + 10)
        let rows = Int(playerPhotoCollectionView.frame.size.height + 10) / (currentTest + 10)
        if cols * rows >= game.numberOfPlayers {
            highestWorking = currentTest
        } else {
            lowestNotWorking = currentTest
        }
    }
    let size = CGSize(width: CGFloat(highestWorking), height: CGFloat(highestWorking))
    (self.playerPhotoCollectionView.collectionViewLayout as! UICollectionViewFlowLayout).itemSize = size
    super.viewDidLayoutSubviews()
}

10-08 11:51