Как создать статические ячейки с динамической высотой ячеек с помощью Swift

Я посмотрел несколько уроков, которые показывают, как установить динамическую высоту ячеек, но все они показывают это, только если вы используете динамические ячейки, устанавливая соответствующие ограничения и используяUITableViewAutomaticDimension, Тем не менее, я хотел бы сделать это для статических ячеек.

В моем приложении есть контроллер табличного представления, который содержит несколько ячеек, в которых отображается категория с индикатором раскрытия, в котором есть заголовок, а затем описание и размер текста описания. Таким образом, я хотел бы, чтобы высота ячейки была динамической в ​​соответствии с размером текста описания.

Причина, по которой я использую статические ячейки, а не динамические ячейки, заключается в том, что над ячейками категорий у меня есть несколько ячеек с некоторыми дизайнами, которые я мог бы получить только с помощью статических ячеек и раскадровки.

я используюiOS9, Xcode 7.3 а такжеSwift 2.2

ОБНОВИТЬ

Код контроллера табличного представления

import UIKit

class CategoriesTableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.rowHeight = UITableViewAutomaticDimension
        tableView.estimatedRowHeight = 140
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // MARK: - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplet,e implementation, return the number of rows
        return 2
    }

}

ОБНОВЛЕНИЕ 2

В соответствии с принятым ответом ниже, я добавил два метода ниже в мой контроллер табличного представления и удалил 2 строки, которые у меня были в viewDidLoad (). Это сделало это для меня! Имейте в виду, что мне нужно было убедиться, что все метки в каждой ячейке использовали ограничение сверху, снизу, впереди и сзади. Кроме того, количество строк для каждой метки должно быть установлено на 0.

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

Ответы на вопрос(4)

что вам нужно сделать, это установить правильноAutoLayout внутриcellвысота увеличивается в зависимости от длины текста описания. Затем вам нужно установить следующее в вашемviewDidLoad

tableview.rowHeight = UITableViewAutomaticDimension
tableview.estimatedRowHeight = 44

Пожалуйста, обратите внимание: вам нужно установитьnumberOfLines изUILabel до 0

добавь пожалуйста в свою тему
Swift 4 вариант:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}
Решение Вопроса

давайте выберем ваш текстовый вид и снимите флажок прокрутки, как показано на рисунке ниже.

Добавьте приведенный ниже код в ваш контроллер представления:

 func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
   return UITableViewAutomaticDimension
 }

 func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
   return UITableViewAutomaticDimension
 }
 Jace05 авг. 2016 г., 06:19
Я не использую текстовое представление. Я использую обычные метки для моего текста.
 Rajamohan S05 авг. 2016 г., 07:44
о, ладно. добро пожаловать друг :) сделай компилятор счастливым!
 Jace05 авг. 2016 г., 06:25
Тем не менее, добавление 2 методов решило мою проблему. Размер ячеек теперь изменяется в зависимости от размера текста надписи. Спасибо!

Для Swift 3

 override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
   return UITableViewAutomaticDimension
 }

 override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
   return UITableViewAutomaticDimension
 }

Ваш ответ на вопрос