根据屏幕尺寸调整CollectionView中项目布局的大小,保持宽高比例不变。

3

我正在尝试将CollectionView中的项目大小调整为屏幕大小,并保持宽高比例。到目前为止,它只在iPad上工作良好,我已根据素材的尺寸设置了一个height和一个width:

private let cardWidth: CGFloat = 362
private let cardHeight: CGFloat = 568

然后在 CardLayout 类中,它继承自 UICollectionViewFlowDelegate
   scrollDirection = UICollectionViewScrollDirection.Horizontal
   itemSize = CGSizeMake(cardWidth, cardHeight)
   minimumInteritemSpacing = 10

问题是项目是卡片形式,所以高度大于宽度,而我正在为iPhone和iPad开发仅支持横屏的应用。我尝试使用UIScreen.mainScreen().bounds,但没有成功。我在CollectionViewController中添加了一些代码,成功地获得了iPhone和iPad的不错效果。
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize{

return CGSizeMake(collectionView.frame.size.height / 2 ,collectionView.frame.size.width / 2)
}

我在返回尺寸时交换了widthheight,因为应用程序只支持横屏。但这仍然不是最好的解决方案,因为卡片无法保持纵横比。那么有没有一种方法可以根据屏幕调整尺寸并保持纵横比呢?
2个回答

0

您可以将纵横比约束应用于单元格,使它们自身保持纵横比,然后从单元格到视图应用另一个约束,使它们相对于视图保持纵横比。然后,您可以通过乘数应用等宽/高约束来调整单元格的大小。


0

我想八年前我有些困惑的想法,今天我会使用的解决方案之一非常简单明了:一个单例检查正在使用的设备是iPhone还是iPad,并返回相应的尺寸。

所以,使用随机数,类似于:

 func getCardSize() -> CGSize {
     if UIDevice.current.userInterfaceIdiom == .pad {
         return CGSize(width: 100, height: 150)
     } else {
         return CGSize(width: 50, height: 75)
     }
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接