【问题标题】:Image does not fit properly in collectionCell图像不适合 collectionCell
【发布时间】:2019-01-06 06:21:05
【问题描述】:

在 Swift 3 中。我的应用程序有一个表视图和一个详细视图,其中是一个视图控制器。在这里,我添加了一个集合视图。必须呈现一组图像。如果在纵向中我检查缩放器中的内容模式以填充,图像会很好地适应自己。在 ladscape 中,它适用于 aspectFill。反之亦然,布局不合适。我做了以下 在 cellForItem 处:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = myCollection.dequeueReusableCell(withReuseIdentifier: "cellCollection", for: indexPath) as! CollectionViewCell
    cell.cellImage.image = UIImage(named: array[indexPath.item])

    if UIDevice.current.orientation.isLandscape{
        cell.cellImage.contentMode = .scaleAspectFill
    }
    else if UIDevice.current.orientation.isPortrait{
        cell.cellImage.contentMode = .scaleToFill
    }

    return cell
}

它不起作用。可能是我从纵向到横向有一些不一致的地方。 我会很感激你的帮助。如果你想看一下 git 中的项目: [https://github.com/ricardovaldes/tareaFinalHoteles.git1。提前致谢。

【问题讨论】:

  • 您的问题不清楚。为什么要根据设备的方向使用不同的内容模式?
  • 仅仅因为图像适合并且集合视图的滚动也正常。我现在不知道为什么,但是在纵向填充和横向填充时的比例非常好。只需查看 GitHub 中的项目即可。谢谢。
  • 您需要说明您遇到的问题。目前还不清楚。没有人应该仅仅为了知道你遇到了什么问题而构建和运行你的项目。这不是本网站的运作方式。
  • 好的,麦迪。我想让我的图像显示在我的收藏卷轴中。在纵向中,当内容模式按比例填充时,它看起来非常好。我使用 size for item at 来尝试配置我的单元格。
  • func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { let size = CGSize(width: myCollection.frame.size.width, height: 280) return尺寸 }

标签: swift image layout uicollectionview


【解决方案1】:

尤里卡。最后我确实解决了这个问题。使用 sizeForItem 时,应用程序可以正常运行。我在寻找改变图像内容模式的方法时迷失或误导,但这不是正确的方法。正确的方法是在旋转后调整大小:为此,您需要函数 willTransition toNewCollection: UITraitCollection。在内部创建一个 UICollectionViewFlowLayout 类型的变量布局。在条件的帮助下,可以定义旋转后你想要的 with 和 heigt。这篇文章对于那些好奇的人来说是清晰而简洁的:UICollectionView Cell Resizing on Device Rotation。 这是我在项目中所做的实现:`

override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
    if UIDevice.current.orientation.isLandscape,
        let layout = myCollection.collectionViewLayout as? UICollectionViewFlowLayout{
        let with = myCollection.frame.size.width
        layout.itemSize = CGSize(width: with, height: 280)
        layout.invalidateLayout()
    }

    else if UIDevice.current.orientation.isLandscape,
        let layout = myCollection.collectionViewLayout as? UICollectionViewFlowLayout{
        let with = myCollection.frame.size.width
        layout.itemSize = CGSize(width: with/2, height: 280)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多