Масштабируйте высоту UITableViewCell на основе читаемой ширины таблицы - PullRequest
0 голосов
/ 05 октября 2018

У меня есть 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. Есть ли способ сделать это?

Вот пример полной ширины и ширины, которую я хочу.

1 Ответ

0 голосов
/ 06 октября 2018

Может быть, вам стоит взять размер экрана или таблицы.

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
    }
}

Не могли бы вы прикрепить изображения, чтобы понять, какой должна быть ячейка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...