根据表格的可读宽度缩放UITableViewCell的高度

时间:2018-10-05 18:50:00

标签: swift uitableview

我有一个UITableViewCell,其中包含一个子视图,该子视图的纵横比为4:3,并且应缩放到表格的可读宽度。我以编程方式构建它:

class MapCell: UITableViewCell, MKMapViewDelegate {
    private let mapView = MKMapView()

    init(reuseIdentifier: String?) {
        super.init(style: .default, reuseIdentifier: reuseIdentifier)
        self.addSubview(self.mapView)
        self.mapView.translatesAutoresizingMaskIntoConstraints = false
        self.addConstraints([
            NSLayoutConstraint(item: self.mapView, attribute: .leftMargin, relatedBy: .equal, toItem: self, attribute: .leftMargin, multiplier: 1, constant: 0),
            NSLayoutConstraint(item: self.mapView, attribute: .rightMargin, relatedBy: .equal, toItem: self, attribute: .rightMargin, multiplier: 1, constant: 0),
            NSLayoutConstraint(item: self.mapView, attribute: .height, relatedBy: .equal, toItem: self.mapView, attribute: .width, multiplier: 0.75, constant: 0)
        ])
        self.mapView.delegate = self
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

然后在视图控制器中设置self.tableView.cellLayoutMarginsFollowReadableWidth = true。这几乎可以工作,但是我无法获得单元格的高度以适合子视图。我想做这样的事情:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if self.getCellType(for: indexPath) == .mapCell {
        return tableView.readableWidth * 0.75
    } else {
        return 44
    }
}

显然,该属性不存在,但是我找不到提供所需值的属性-我检查的所有“ width”和“ size”属性要么太大要么为0。有什么方法可以这样吗?

Here is an example of the full width vs the width I want.

1 个答案:

答案 0 :(得分:0)

也许您应该使用屏幕或tableView的大小。

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if self.getCellType(for: indexPath) == .mapCell {
        return UIScreen.main.bounds.width * 0.75
    } else {
        return 44
    }
}

您是否可以附加图像以了解单元格应该是什么?