![View Heirarchy](https://i.stack.imgur.com/IWmix.png)
В общем, я хочу вставить UITableView
внутрь UITableViewCell
.
Я использовал UIStackView
, чтобы использовать его AutoLayout
power!
В любом случае, каждый ряд "Inner UITableView" будет состоять из UIImageView
фиксированного размера и UILabel
из lines = 0
(т.е. не фиксирован)
UIStackView
(по горизонтали) -> UIImageView
+ UILabel
Требования:
- Размер каждой строки / ячейки для InnerTableViewдолжен быть динамическим из-за случайного текста, предоставляемого с сервера.Таким образом, высота всего Внутреннего
UITableView
до automaticDimension
- Текст для
UILabel
над Внутренним UITableView
также является динамическим.(таким образом, имеет смысл использовать UIStackView
в первую очередь)
Примечание: Main UITableView
состоит из нескольких ячеек разных типов (в основном это BotChatBot)
Также: estimatedHeight
может составлять около 40 точек.
Проблема:
Динамический размер InnerTableView приводит кметод cellForRowAt
не вызывается один раз, что не позволяет UIStackView
увеличить его длину из-за отсутствия изменений в contentSize
.
Чтобы решить вышеуказанную проблему, я попытался:
- Установить начальное ограничение высоты для UITableVIew равным 10 (некоторое случайное число),
estimatedRowHight
для InnerTableView равным 50, таким образомустановка высоты UITableView как tableViewInsideCellHeightConstraint?.constant = tableViewInsideCell.contentSize.height
, что каким-то образом дает мне место, но это все еще не надежно, когда высота строки превышает расчетную высоту 40
![The problem](https://i.stack.imgur.com/O8qqT.png)
PS layoutIfNeeded()
были запущены для TableView
, StackView
и ParentCell
У меня также есть другой способ решения вышеуказанной проблемы:
- Используя приблизительную высоту, умножьте константу (оценка высоты) на количество отображаемых строк, т.е. размер списка
- Измените
heightConstraint
для Inner UITableView
на вычисленную, - Для каждой итерации рассчитайте общую «ТРЕБУЕМУЮ» высоту (используя
+=visibleCells[i].frame.height
) UITableView (поскольку каждая итерация будет предоставлять размер ячейки (размер содержимого) - Обновлять ограничение высоты
Inner UITableView
if heightForTableView == nil {
if indexPath.row == listDict!.count - 1 {
var heightOfTableView: CGFloat = 0.0
let cells = tableView.visibleCells
for visibleCells in cells {
heightOfTableView += visibleCells.frame.height
}
let newHeight = heightOfTableView + cell.frame.height
reloadMe(newHeight)
}
}
Вышеуказанные фиx приводит к видимому рывку в пользовательском интерфейсе: [
Вопрос:
Есть ли конкретное решение вышеуказанной проблемы?Я пытался искать его снова и снова .. не могу найти какой-либо сильной фиксации!