У меня есть стек просмотра.Я пытаюсь вставить TableView в качестве одного из его упорядоченных подпредставлений.Я хочу, чтобы высота моего табличного представления была автоматической в зависимости от количества дочерних ячеек.После многих исследований, особенно с ответами в StackOverflow, я обнаружил, что мне пришлось «аннулировать» «intrinsicContentSize» представления таблицы, когда в представлении таблицы размещаются подпредставления.Хотя, это все еще не работает:
Вот мой класс просмотра таблицы:
class TableView : UITableView {
override var intrinsicContentSize: CGSize {
get {
(BP1) return CGSize(width: CGFloat.greatestFiniteMagnitude, height: contentSize.height)
}
}
override func layoutSubviews() {
super.layoutSubviews()
//(***)
(BP2) invalidateIntrinsicContentSize()
}
}
Хотя проблема в том, что при запуске приложения tableView принимает высоту 44 * numberOfRow(44 кажется высотой по умолчанию для UITableView).ContentSize.height не учитывается.
Я пытался установить точки останова в (BP) (в приведенном выше коде): после нескольких входов в 2 функции программа, наконец, переходит в (BP1), имеет здесь правильный contentSize.height, установите егов intrinsicContentSize, затем переходит к layoutSubview (BreakPoint 2).
Проблема в том, что в данный момент, хотя intrinsicContentSize находится прямо на входе layoutSubview, мой tableview.frame.height
по-прежнему равен 44 * numberofrow, в BP2 (после super.layoutSubviews()
) .Я исключаю, что super.layoutSubviews()
учитывает новый intrinsicContentSize, который был только что установлен на правильное значение, и обновляет tableView.frame.height до него впоследствии.
Наконец, я сделал, чтобы поместить эту строкуat (***):
frame = CGRect(x:frame.origin.x, y: frame.origin.y, width:10000, height: contentSize.height)
При этом все работает, и кадр обновляется до нужного значения.Хотя я не понимаю, почему мое правильное внутреннее содержание contentSize не учитывается в процессе автоматического размещения в super.layoutSubviews()
.