Как я могу получить доступ к высоте внутренней ячейки tableviewcell в maintableviewcell в Swift

#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:

  1. Создайте swift-файл с именем SelfSizedTableView.
  2. Предоставьте SelfSizedTableView вашему TableView, который находится внутри раскадровки или xib.
  3. Нет необходимости устанавливать ограничение высоты для TableView.
  4. Просто зайдите в инспектор размеров, перейдите к нижней части и установите для внутреннего размера значение 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