为什么UIImage超出了UIImageView?

时间:2019-04-12 15:41:38

标签: ios swift

我当前正在表视图中加载UIImage,但是问题是所有UIImage都超出了UIImageView。实际上,它们的高度等于电池的高度。

我做了一些研究,发现必须设置clipsToBounds = true,但没有任何改变。

当我在表cellForRowAt IndexPath中设置单元格的imageView到本地保存的图像时,一切正常。

这是我使用getDataInBackground从PFFiles获取UIImages数组的函数。

func getImagesArray() {
    UIImagesArray.removeAll()

    for i in 0..<self.imagesArray.count { // imagesArray is the PFFile array
        self.imagesArray[i].getDataInBackground(block: { (data, error) in
            if error != nil {
                print(error?.localizedDescription)
            } else {
                if let imageData = data {
                    if let imageToDisplay = UIImage(data: imageData) {
                        self.UIImagesArray.append(imageToDisplay)

                        if self.imagesArray.count == self.UIImagesArray.count {
                            self.tableView.reloadData()
                        }
                    }
                }
            }
        })
    }
}

如果需要,这是cellForRowAt的代码:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "userCell", for: indexPath) as! feedUserCellTableViewCell

    cell.imageView!.image = UIImagesArray[indexPath.row]

    cell.username.text! = self.usernamesArray[indexPath.row]

    cell.age.text! = String(self.agesArray[indexPath.row])

    cell.country.text! = self.countriesArray[indexPath.row]

    cell.countryFlagImageView.image! = self.getCoutryImageView(country: self.countriesArray[indexPath.row])

    if self.sexArray[indexPath.row] == "Male" {

        cell.sexImageView.image = #imageLiteral(resourceName: "male")

    } else if self.sexArray[indexPath.row] == "Female" {

        cell.sexImageView.image = #imageLiteral(resourceName: "female")

    }

    cell.selectionStyle = .none

    return cell

}

您能解释一下这个错误吗,为什么getDataInBackground会引起这个错误?

1 个答案:

答案 0 :(得分:3)

问题是您有一个自定义单元格,您正在其中使用该单元格的内置imageView来显示图像。不要那样做。

  • 创建自己的自己图片视图,并为其提供一个名称不同的插座( not imageView)。

  • 赋予它约束,使其无法增长。 (图像视图“希望”增长到其图像的大小,因此您需要在整套约束条件下进行阻止。)

  • 确保其内容模式为aspectFillaspectFit

  • 确保其clipsToBoundstrue(默认情况下为 not )。