Как создать UITableView с intrinsi c Height в Swift 5, используя UIKit? - PullRequest
0 голосов
/ 30 апреля 2020

Я столкнулся с проблемой при использовании UITableViews.

Для AutoLayout требуется фиксированное ограничение высоты для UITableView, поэтому Высота не изменяется когда я добавляю или удаляю TableViewCells.

Моя проблема в том, что я использую TableView внутри a ScrollView. Это не очень хорошо, поскольку оба элемента прокручиваются .

Мой план состоит в том, чтобы всегда изменять размер TableView в зависимости от его высоты содержимого. В этом случае TableView может никогда не прокручиваться .

Моя идея до сих пор была следующей, но по какой-то причине она действительно не работает:

tableView.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: tableView.contentSize.height)

Если у вас есть какие-либо идеи о том, как это исправить, пожалуйста, прокомментируйте ниже. Более простые решения без расширений класса и др. c. являются предпочтительными;)

Большое спасибо, ребята!

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Вы можете использовать что-то вроде:

final class AutoSizingTableView: UITableView {

    override init(frame: CGRect, style: UITableView.Style) {
        super.init(frame: frame, style: style)
        setContentCompressionResistancePriority(.required, for: .vertical)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setContentCompressionResistancePriority(.required, for: .vertical)
    }

    override var contentSize: CGSize {
        didSet {
            invalidateIntrinsicContentSize()
        }
    }

    override func reloadData() {
        super.reloadData()
        invalidateIntrinsicContentSize()
    }

    override var intrinsicContentSize: CGSize {
        setNeedsLayout()
        layoutIfNeeded()
        return contentSize
    }
}

По сути, для этого устанавливается значение intrinsicContentSize, равное contentSize при перезагрузке данных табличного представления или при изменении contentSize.

Однако вы должны задать себе вопрос: если мне не нужно выписывать logi c, нужно ли мне на самом деле просмотр таблицы?

0 голосов
/ 30 апреля 2020

Вам необходимо переопределить метод updateViewConstraints() в вашем UIViewController и установить новую высоту tableView следующим образом:

override func updateViewConstraints() {
    tableViewHeightConstraint?.constant = tableView.contentSize.height
    super.updateViewConstraints()
}

И вызвать self.view.setNeedsUpdateConstraints(), когда вам нужно воссоздать tableView с новая высота.

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