开发者社区 问答 正文

在集合视图中调整图像大小

override func viewDidLoad() {
        let space:CGFloat = 10.0
        let dimensionwidth = (view.frame.size.width - (2 * space))
        let dimensionheight = (view.frame.size.height - (2 * space))

          flowLayout.minimumInteritemSpacing = space
          flowLayout.minimumLineSpacing = space
          flowLayout.itemSize = CGSize(width: dimensionwidth, height: dimensionheight)
        }

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CellMemeCollection", for: indexPath) as! CellMemeCollection
        let Meme = self.memes[(indexPath as NSIndexPath).row]

        // Set the name and image
        cell.MemeImage?.image = Meme.memeImage
        cell.MemeImage.sizeThatFits(flowLayout.itemSize)

        return cell
    }

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

     //    let height = view.frame.size.height
      //   let width = view.frame.size.width

        return CGSize(width: 200, height:400)
     }

我试过所有能让照片看上去更大但没什么变化的东西。我玩了项目的大小,我试着调用函数收集器视图(_收藏品视图:UICollectionView,布局集合视图Layout:UICollectionViewLayout,size ForItemAt indexPath:IndexPath)->CGSize但没有工作,请帮助!

展开
收起
游客5akardh5cojhg 2019-12-08 23:55:25 411 分享 版权
阿里云 AI 助理回答

从你提供的代码片段来看,你正在尝试调整UICollectionView中cell的大小以展示更大的图片。这里有几个点需要注意和调整:

  1. 设置FlowLayout的itemSize: 你在viewDidLoad()里已经设置了flowLayout.itemSize,这是正确的做法。确保这个尺寸与你期望的图片显示大小相匹配。

  2. collectionView(_:layout:sizeForItemAt:)方法: 这个方法是用来动态计算每个cell的大小的。在你的代码中,你注释掉了根据视图宽度和高度来计算的部分,并直接返回了一个固定大小(200x400)。这意味着无论屏幕尺寸如何,所有cell都将被强制设为这个尺寸。如果你希望图片能自适应地填满更多空间,应该取消注释并适当调整这部分逻辑,或者直接移除这个方法,让cell的大小完全由flowLayout.itemSize决定,如果你已经在viewDidLoad中设置了合适的大小。

  3. Cell内图片的布局: 在collectionView(_:cellForItemAt:)方法中,你设置了cell.MemeImage?.image = Meme.memeImage,但没有明确指出图片应该如何填充cell。确保你的CellMemeCollection类中的MemeImage视图有正确的content mode设置,比如.scaleAspectFit.scaleAspectFill,这将影响图片如何在cell内缩放以适应其大小。

  4. 更新FlowLayout设置: 确保在调整cell大小后,重新加载 UICollectionView 的布局。可以在设置完新的itemSize之后调用collectionView.collectionViewLayout.invalidateLayout()来强制更新布局。

综上所述,你可以尝试以下修改:

  • 调整flowLayout.itemSize到你想要的图片展示尺寸。
  • 确保cell内的UIImageView使用了合适的content mode。
  • 如果你在collectionView(_:layout:sizeForItemAt:)中有更复杂的逻辑,请确保它正确反映了你对cell大小的需求;如果没有,则考虑是否需要这个方法。
  • 更新布局:flowLayout.invalidateLayout()

示例代码调整:

override func viewDidLoad() {
    super.viewDidLoad()
    let space:CGFloat = 10.0
    let dimensionwidth = (view.frame.size.width - (2 * space))
    let dimensionheight = (view.frame.size.height - (2 * space))

    flowLayout.minimumInteritemSpacing = space
    flowLayout.minimumLineSpacing = space
    flowLayout.itemSize = CGSize(width: dimensionwidth, height: dimensionheight)
    collectionView.collectionViewLayout.invalidateLayout() // 添加这一行来更新布局
}

// 如果你确定不需要动态调整cell大小,可以移除这个方法
// func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
//     return CGSize(width: 200, height: 400)
// }

// 确保UIImageView的content mode设置正确
cell.MemeImage.contentMode = .scaleAspectFit // 或者使用.scaleAspectFill,根据需求选择

这样调整后,你应该能看到图片按照预期的大小展示。如果还有问题,请进一步检查是否有其他约束或设置影响了布局。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: