Изменение высоты отдельной ячейки UITableView

Я хотел бы что-то вроде следующего:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("NewsCell", forIndexPath: indexPath) as! UITableViewCell

    if indexPath == 3{

        cell.height = "50dp"

    }       

    return cell

}

Каков альтернативный или самый простой способ сделать это?

РЕДАКТИРОВАТЬ

Можно ли мне также указать номер раздела: т.е.

if sectionIndex == 5

5 ответов

Я предлагаю использовать функцию heightForRowAtIndexPath. TableView вызовет эту функцию, чтобы определить высоту строки для определенного пути индекса.

Образец кода:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if indexPath.section == SECTION_INDEX {
        return 60
    } else {
        return UITableViewAutomaticDimension
    }
}

Свифт 4:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.section == SECTION_INDEX {
        return 60
    } else {
        return UITableViewAutomaticDimension
    }
}

Небольшое объяснение: у indexPath есть два свойства: section и row. Проверяя эти два свойства, вы можете создать свой собственный поток управления для определения высоты для каждой ячейки.

Если вы вернете 60, это означает, что вы хотите, чтобы высота ячейки составляла 60 баллов. Если вы возвращаете UITableViewAutomaticDimension, вы хотите, чтобы система выбрала для вас наилучшую высоту (в этом случае вам лучше установить автоматическое расположение для ячейки в раскадровке).

Я также предлагаю вам пройти курс Стэнфорда CS193p на iTunes U, он был бы вам очень полезен:)

Самый простой способ - переопределить heightForRowAtIndexPath

  override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    let section = indexPath.section
    let row = indexPath.row
    if section == 0 && row == 2{
      return 50.0
    }
    return 22.0
  }
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat{
   if indexPath.section == 5
   {
       if indexPath.row == 3
       {
           return 150.0
       }
   }

   return 200.0
}

самый простой способ - переопределить метод делегата heightForRowAtIndexPath в tableview. Этот метод, основанный на содержании, автоматически изменит высоту.

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

Следуя ответу Чжу Шэнци, вот код Swift 5+.

      func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if indexPath.section == SECTION_INDEX {
            return 160
        } else {
            return UITableView.automaticDimension
        }
    }
Другие вопросы по тегам