【问题标题】:Image not showing up in my UICollectionView in SwiftSwift 中我的 UICollectionView 中没有显示图像
【发布时间】:2015-10-21 07:19:47
【问题描述】:

我的图片没有显示在我的 UICollectionView 中。我不确定是什么错误。下面是我的代码。

MyCollectionView.swift

/** -- **/

    overide func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
            let cell = collectionView.dequeueReusableCellWithReuseIdentifier("MyCollectionViewCell", forIndexPath: indexPath) as! MyCollectionViewCell
            let event = events[indexPath.row]

            cell.imageView?.image = UIImage(named: "blabla_iPad@2x")

            return cell

        }

/** -- **/

MyCollectionViewCell.swift

import UIKit

class MyCollectionViewCell: UICollectionViewCell {
    var imageView: UIImageView!

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override init(frame: CGRect) {
        super.init(frame: frame)

        imageView = UIImageView(frame: CGRect(x: 0, y: 16, width: frame.size.width, height: frame.size.height))
        imageView.contentMode = UIViewContentMode.ScaleAspectFit
        contentView.addSubview(imageView)
    }
}

即使我使用 localPath,它仍然无法正常工作。

/*
    /Users/MNurdin/Library/Developer/CoreSimulator/Devices/B30917DD-1C57-430F-9ACF-6526B226CF15/data/Containers/Data/Application/35ACB17A-4C25-4A49-BE3D-04AA51F36CC0/tmp/jreGfApABajWPCnkfPBh.jpg
*/

cell.imageView?.image = UIImage(data: NSData(contentsOfURL: NSURL(fileURLWithPath:localPath)!)!)

【问题讨论】:

  • 如果我使用程序化方式可以吗?
  • 尝试输入图片的扩展名,例如 blabla_iPad.png 或 blabla_iPad.jpg 或任何扩展名。
  • 您的 MyCollectionViewCell 是用 xib 文件创建的吗?如果您使用 xib 文件创建,请尝试在 awakeFromNib 方法中创建 imageView。否则,尝试在 initWithCoder 中创建 imageView: too
  • 没有 xib 文件。只是 Main.Storyboard。
  • 你的细胞真的出现了吗?您是否尝试设置背景颜色?您的资产看起来如何?你为什么在名字里加上@2x?它也是资产的名称还是没有@2x?

标签: ios swift nsdata nsurl


【解决方案1】:
 var imageView: UIImageView!

这应该是一个 IBOutlet。

@IBOutlet weak var imageView: UIImageView!

并将其连接到您的故事板。

【讨论】:

  • hä?他将其添加为子视图
  • 是的,但使用 IBOutlets 是一种更清洁的解决方案。另外,如果他这样做,我怀疑他的问题会得到解决。
  • 不是真的。它添加为子视图,设置框架。所以它应该出现
  • 如果我使用此解决方案,我将收到致命错误:在展开可选值 (lldb) 时意外发现 nil。
  • 确保您将 IBOutlet 连接到您的视图。在这里查看如何:developer.apple.com/library/ios/recipes/…
【解决方案2】:

真是让人头疼。我不知道这里到底出了什么问题,但这里有一些提示我自己尝试找出发生了什么

之后:

cell.imageView?.image = UIImage(named: "blabla_iPad@2x")

print(cell.imageView?.image.bounds.size)
cell.imageView?.layer.borderWidth = 1.0
cell.imageView?.layer.borderColor = UIColor.blackColor().CGColor

您现在将看到以下内容之一: 1. 和以前一样,这意味着你在单元格之外绘制你的图像。尝试改变框架。 2.黑边空白方块:表示你的图片有问题 3. 打印的框架尺寸为零。分配等于图像边界的 imageView 框架。

【讨论】:

  • 我会试试你的解决方案。
  • 帧的值是多少?即打印框输出?
【解决方案3】:
  • 您确定 iamge 在 Xcassets 中还是在顶部包中。将您的图像保存为“ImageName~ipad.png”。它只是 ios 在 i-Pad 上使用此图像的标识符。将图像放入 Xcassets。到时候一切都会好起来的。

  • 并且还在您的自定义单元类初始化程序中添加一些日志消息以检查控制流,您的自定义类是否有问题。

  • 您是否已在 viewDidLoad 中注册了要与此单元格标识符一起使用的自定义类?

【讨论】:

    【解决方案4】:

    您提到您正在从情节提要加载单元格。从情节提要加载时,不会调用 MyCollectionViewCell 类中的 init(frame: CGRect) 方法,这意味着您将自定义 UIImageView 添加到单元格的 contentView 的代码也不会被调用。

    因此,问题不在于图像未加载到 UIImageView 中,而更多地与整个 UIImageView 根本没有添加到单元格中有关。

    尝试将其移至 awakeFromNib()

    【讨论】:

      【解决方案5】:

      我有同样的问题。仅在切换到 Swift 3 后打开的 xib 文件上发生。我在 xib 中的任何 UIImageView 上禁用了 Clip To Bounds,我可以再次看到图像,但现在我的cornerRadius 设置不起作用。

      在 awakeFromNib 中根据视图大小设置cornerRadius 时也存在问题,因为 xib 视图默认的帧大小为 (1000,1000)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-06
        • 2019-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多