如何以编程方式将宽高比约束应用于自定义UICollectionViewCell?

时间:2015-05-08 19:23:47

标签: ios swift cocoa-touch uicollectionview uicollectionviewcell

我正在尝试创建一个显示相册封面的网格样式视图。我想每排3张专辑封面。棘手的部分是让细胞适当地增加尺寸,这取决于所使用的装置,例如iPhone 4s / 5 / 5s / 5c / 6/6 plus,无论使用何种设备,每行都会显示3个/单元格。

我从来没能做到这一点。我正在考虑手动设置尺寸:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    if DeviceHelper.DeviceType.IS_IPHONE_4_OR_LESS {
        return CGSizeMake(115, 140)
    } else if DeviceHelper.DeviceType.IS_IPHONE_5 {
        return //size
    } else if DeviceHelper.DeviceType.IS_IPHONE_6 {
        return //size
    } else {
        return //size 
    }
}

我有一个帮助器,可以确定正在使用的设备,我可以在我的应用程序中的任何位置调用它。但是,有没有办法确保无论使用什么设备,每行中都会显示3个单元格,并且还有相同的填充显示如下:

enter image description here

宽高比限制很有帮助但是这次我不能将它们应用到单元格,因为界面构建器不会允许它。有没有直接做到这一点?

提前感谢您的时间。

1 个答案:

答案 0 :(得分:3)

删除默认单元格间距:

Remove cell spacing

试试这段代码:

只需为集合视图行中的单元格数设置-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { int numberOfCellInRow = 3; CGFloat padding = 5.0; CGFloat collectionCellWidth = [[UIScreen mainScreen] bounds].size.width/numberOfCellInRow; CGFloat finalWidthWithPadding = collectionCellWidth - padding; return CGSizeMake(finalWidthWithPadding , finalWidthWithPadding); } 的值

的OB​​J-C

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    var numberOfCellInRow : Int = 3
    var padding : Int = 5
    var collectionCellWidth : CGFloat = (self.view.frame.size.width/CGFloat(numberOfCellInRow)) - CGFloat(padding)
    return CGSize(width: collectionCellWidth , height: collectionCellWidth)
}

夫特

tickPath.moveToPoint(CGPoint(
            x: center.x + cos(angle) *  point1 ,
            y: center.y + sin(angle) * point1
            ))

        tickPath.lineToPoint(CGPoint(
            x: center.x + cos(angle) * point2,
            y: center.y + sin(angle) * point2
            ))

我认为它适用于所有设备。