#ios #swift #uitableview
#iOS #swift #uitableview
Вопрос:
Я новичок в Swift, и я не могу получить доступ к высоте внутри UITableViewCell в основной UITableViewCell.
В моей основной tableviewcell мой код в cellforrowatindexpath мой код выглядит следующим образом:
cell.constraintHeightOfTblView.constant = CGFloat(135 * (cell.arrCourses.count))
Я создал ограничение высоты внутри tableview и умножаю его на основе количества массивов. Это работает. Но если данные в ячейке увеличиваются, она не получает правильную высоту, потому что я определяю здесь статическую высоту.
Итак, я хочу внутреннюю высоту tableviewcell, чтобы она могла работать должным образом. Могу ли я получить к ней доступ?
Я хочу добиться этого:
Но я получаю это по мере увеличения содержимого insidetableviewcell
Внутри tableviewcell прокручивается, я не хочу, чтобы внутренняя ячейка tableview прокручивалась по-другому.
Комментарии:
1. Может кто-нибудь, пожалуйста, сказать мне, как этого добиться?
2. вам нужно несколько таких ячеек с растущим текстом?
3. @vikram Нет, в моем случае это tableview внутри tableview.
4. итак, test1 и test2 внутри другого tableview?
5. @vikram Верхний вид профиля, кнопка «Комментарий», «Принять» и «отклонить» находятся в главном tableview, а время начала, время окончания, тест — в insidetableview
Ответ №1:
Цель этого кода — предоставить TableView высоту, соответствующую размеру его содержимого, и остановить прокрутку.
Ранее это достигалось с помощью ограничения высоты в TableView.
Шаги, если ваш TableView находится внутри раскадровки или xib:
- Создайте swift-файл с именем SelfSizedTableView.
- Предоставьте SelfSizedTableView вашему TableView, который находится внутри раскадровки или xib.
- Нет необходимости устанавливать ограничение высоты для TableView.
- Просто зайдите в инспектор размеров, перейдите к нижней части и установите для внутреннего размера значение placeholder, не устанавливая флажки height и width.
Если ваш TableView создан программно, убедитесь, что он является дочерним элементом SelfSizedTableView.
import UIKit
class SelfSizedTableView: UITableView {
/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
// Drawing code
}
*/
func defaultSetup() {
// do something here
}
override open func awakeFromNib() {
super.awakeFromNib()
// Initialization code
defaultSetup()
}
override init(frame: CGRect, style: UITableView.Style) {
super.init(frame: frame, style: style)
defaultSetup()
}
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
defaultSetup()
}
/// set a value to maxHeight if you want tableView to scroll after a specific height
/// e.g. when contentSize.height > maxHeight
/// table view will start to scroll
var maxHeight: CGFloat?
/// set a value to minHeight if you want tableView to avoid scroll before specific height
/// e.g. when contentSize.height > minHeight
/// table view will start to scroll
var minHeight: CGFloat?
override func reloadData() {
super.reloadData()
self.invalidateIntrinsicContentSize()
self.layoutIfNeeded()
}
override var intrinsicContentSize: CGSize {
let height: CGFloat
if let maxHeight = maxHeight {
height = min(contentSize.height, maxHeight)
}
else if let minHeight = minHeight {
height = max(contentSize.height, minHeight)
}
else {
height = contentSize.height
}
return CGSize(width: contentSize.width, height: height)
}
override func layoutSubviews() {
super.layoutSubviews()
invalidateIntrinsicContentSize()
}
}
Ответ №2:
Вы можете попробовать использовать приведенный ниже метод делегирования, чтобы указать высоту для каждой строки в вашем TableView:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
// calculate the height and return.
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
}
Также попробуйте снять автоматические флажки для «Высоты строки» и «Оценки» в инспекторе размеров Tableview, как показано ниже:
Вы можете взять IBOutlet из inside Tableview и получить высоту из границ, таких как insideTableView.bounds.высота
Если вам нужна высота ячейки основного tableview, вы можете попробовать получить что-то вроде mainTableView.RowHeight или mainTableView.estimatedRowHeight
Если вам не нужна прокрутка внутри табличного представления, вы можете отключить прокрутку, сняв флажок Прокрутка включена в инспекторе атрибутов
Комментарии:
1. У меня есть tableview внутри tableview
2. Затем вы можете взять IBOutlet из inside Tableview и получить высоту из границ, таких как insideTableView.bounds. высота
3. Я хочу, чтобы высота ячейки tableview height не работала должным образом
4. Вы имеете в виду, что вам нужна высота ячейки основного tableview, тогда вы можете попытаться получить что-то вроде mainTableView.RowHeight или mainTableView.estimatedRowHeight