Максимальный размер UITableView при соблюдении ограничений на автоматическое расположение - PullRequest
0 голосов
/ 17 сентября 2018

Итак, что я хочу сделать, - это иметь представление таблицы, которое максимизирует его размеры при соблюдении ограничений на автоматическое расположение. Прямо сейчас у меня есть табличное представление, которое максимизирует его размер, но его нельзя прокручивать.

public class ExpandingTableView2: UITableView {

    override public func reloadData() {
        super.reloadData()
        self.setNeedsLayout()
        self.invalidateIntrinsicContentSize()
    }

    override public func layoutSubviews() {
        super.layoutSubviews()
        if !self.bounds.size.equalTo(self.intrinsicContentSize) {
            self.invalidateIntrinsicContentSize()

        }
    }

    override public var intrinsicContentSize: CGSize {
        self.layoutIfNeeded()
        let intrinsicContentSize = super.contentSize
        return intrinsicContentSize
    }
}

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Здесь важно сохранить ограничения, управляющие максимальной высотой представления таблицы, выше, чем ограничения, используемые для установки его высоты. Я также установил сопротивление сжатию содержимого таблицы: 250.

public class ExpandingTableView: UITableView {

    @IBOutlet public weak var heightConstraint: NSLayoutConstraint?

    override public func reloadData() {

        guard let heightConstraint = self.heightConstraint, heightConstraint.priority.rawValue < 750  else { return }

        var height: CGFloat = 0.0
        for section in 0..<(self.dataSource?.numberOfSections?(in: self) ?? 1) {
            for row in 0..<(self.dataSource?.tableView(self, numberOfRowsInSection: section) ?? 0) {
                let rowHeight = (self.delegate?.tableView?(self, heightForRowAt: IndexPath(row: row, section: section))) ?? self.rowHeight
                height += rowHeight
            }
        }

        heightConstraint.constant = height

        super.reloadData()
        self.setNeedsLayout()
    }

}
0 голосов
/ 17 сентября 2018

Вы можете рассчитать высоту просмотра таблицы на основе размера контента, создав выход для ограничения высоты:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if tableViewHeightConstraint.constant != tableView.contentSize.height && tableViewHeightConstraint.constant < view.frame.height // This will prevent to increase tableview height beyond the view and let it scroll
{
        setupHeightConstraintForTableView(tableView.contentSize.height)
    }

   // rest of the code
}

func setupHeightConstraintForTableView(_ heightValue: CGFloat) {
    tableViewHeightConstraint.constant = heightValue
    self.updateConstraintsIfNeeded()
}
...