如何以编程方式将纵横比约束应用于自定义 UICollectionViewCell?
How do I apply aspect ratio constraints to a custom UICollectionViewCell programmatically?
我正在尝试创建一个显示相册封面的网格样式视图。我想要每行 3 个专辑封面。棘手的部分是让单元格根据正在使用的设备适当地增加大小,例如iPhone 4s/5/5s/5c/6/6 plus,因此无论使用什么设备,每行始终显示 3 items/cells。
我从来没能做到这一点。我正在考虑像这样手动设置尺寸:
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 个单元格,并且还可以像这样显示相等的填充:
宽高比约束很有用,但这次我无法将它们应用于单元格,因为界面生成器不允许这样做。有直接的方法吗?
提前感谢您的宝贵时间。
删除默认单元格间距:
试试这个代码:
只需为集合视图一行中的单元格数设置 numberOfCellInRow
的值
Obj-C
-(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);
}
Swift
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)
}
我认为它适用于所有设备。
我正在尝试创建一个显示相册封面的网格样式视图。我想要每行 3 个专辑封面。棘手的部分是让单元格根据正在使用的设备适当地增加大小,例如iPhone 4s/5/5s/5c/6/6 plus,因此无论使用什么设备,每行始终显示 3 items/cells。
我从来没能做到这一点。我正在考虑像这样手动设置尺寸:
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 个单元格,并且还可以像这样显示相等的填充:
宽高比约束很有用,但这次我无法将它们应用于单元格,因为界面生成器不允许这样做。有直接的方法吗?
提前感谢您的宝贵时间。
删除默认单元格间距:
试试这个代码:
只需为集合视图一行中的单元格数设置 numberOfCellInRow
的值
Obj-C
-(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);
}
Swift
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)
}
我认为它适用于所有设备。