iOS 11中UITableViewCell内UIImageView的固定大小

iOS 11中UITableViewCell内UIImageView的固定大小,ios,uitableview,Ios,Uitableview,我使用默认的UITableViewCell,它附带UIImageView、标题标签和描述标签。我希望我的UIImageView有一个固定的大小,以便所有图像都具有相同的大小。目前看来是这样的: 单元格的行高为“自动”,以下是UITableView的属性 如何将UIImageView设置为固定大小 图像以异步方式下载,如下所示: override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPa

我使用默认的UITableViewCell,它附带UIImageView、标题标签和描述标签。我希望我的UIImageView有一个固定的大小,以便所有图像都具有相同的大小。目前看来是这样的:

单元格的行高为“自动”,以下是UITableView的属性

如何将UIImageView设置为固定大小

图像以异步方式下载,如下所示:

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

        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
        let dish = self.dishes[indexPath.row]
        cell.textLabel?.text = dish.title
        cell.imageView?.image = UIImage(named: "placeholder")

        cell.detailTextLabel?.text = dish.description

        cell.imageView?.setImageFor(url: URL(string: dish.imageURL)!) { image in
            cell.imageView?.image = image
            cell.imageView?.translatesAutoresizingMaskIntoConstraints = false
            cell.imageView?.widthAnchor.constraint(equalToConstant: 50)
            cell.imageView?.heightAnchor.constraint(equalToConstant: 50)
            cell.setNeedsLayout()
        }

        return cell

    }
UIImageView+添加。swift

func setImageFor(url :URL, completion: @escaping (UIImage) -> ()) {

        DispatchQueue.global().async {

            let data = try? Data(contentsOf: url)

            if let data = data {

                let image = UIImage(data: data)

                DispatchQueue.main.async {

                    completion(image!)

                }
            }
        }
    }

您正在尝试更改
完成块处理程序内
UIImageView
高度锚定
宽度锚定
。您不应该这样做,如果需要,请确保正在更新
主线程中的布局

您的
UIImageView
顶部、底部、前导和尾随定位点
可能等于
超级视图
,在您的情况下,它是
tableViewCell
,并且假定您的
UITableViewCell
具有自动高度。这些结果导致
UIImageView
的大小不相等

由于您使用的是interface builder,请尝试按如下方式布局您的
UIImageView

如您所见,我的
UIImageView
具有固定的宽度和高度


最后,别忘了设置你的
UIImageView
contentMode
并勾选
cliptobunds
为是。

试着设置
imageView.contentMode=.scaleAspectFit
。我做了,它什么也没做!谢谢imageView.image设置在主线程内。我已经粘贴了setImageURL的代码。由于某些原因,我无法在UIImageView上设置任何约束,如图所示。同样,我使用的是默认的UITableViewCell,而不是创建原型单元格。也许这是Xcode 9中的一个bug。您可以:)。单击TableViewCell并将其
样式设置为“自定义”。试试看。如果我的风格是定制的,那么我就不能设置任何东西!没关系。我将创建一个自定义的原型单元并使用它。这取决于您。只是别忘了将自定义UITableViewCell注册到UITableView,并选择一个有用的答案:)我已经完成了所有设置,但仍在努力。由于我的图像有一个垂直方向,它总是扩展到单元格的高度,尽管有固定的高度限制。克里普托邦成功了!