2017-02-02 7 views
1

После прохождения через все другие форм переполнения стека, я реализовал динамическую высоту для одного из моих клеток следующим образом:TableView - heightForRowAtIndexPath не называется

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    var cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as UITableViewCell 

    if(indexPath.row == 1){ 
     var image : UIImage = maskRoundedImage(image: UIImage(named: "Temp_Profile.png")!, radius: 150) 
     cell.imageView?.image = image 
     return cell 
    } 
    cell.textLabel?.text = TableArray[indexPath.row] 
    cell.backgroundColor = UIColor.init(colorLiteralRed: 0.56, green: 0, blue: 0.035, alpha: 1) 
    cell.textLabel?.textColor = UIColor.white 
    cell.textLabel?.font = UIFont(name: "Helvetica", size: 28) 

    return cell 
} 
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if indexPath.row == 1 { 
     return UITableViewAutomaticDimension * 3 

    } 
    return UITableViewAutomaticDimension 
} 

Это кажется довольно простым, но сеанс отладки показывает, что heightForRowAtIndexPath никогда не вызывается. Контроллер просмотра - это UITableViewController, и все остальное работает правильно. Кто-нибудь из вас видит причину, по которой эта функция не вызывается?

Благодарим за помощь!

+0

Как указано ниже, UITableViewAutomaticDimension не является значением, которое должно использоваться для арифметики. возвращение UITableViewAutomaticDimension * 3 будет иметь непредсказуемые эффекты. – PeejWeej

+0

Обратите внимание, что вызов 'heightForRowAt' может быть дорогим; вы также можете вызвать 'self.tableView.rowHeight = UITableViewAutomaticDimension' и ' self.tableView.estimatedRowHeight = 72.0 // оцененное среднее значение 'в' viewDidLoad'. Se также, например, здесь: https://www.appcoda.com/self-sizing-cells/ – Koen

ответ

8

В Swift 3, подпись:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 

У вас есть старая подпись, так что не признаются.

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    if indexPath.row == 1 { 
     return UITableViewAutomaticDimension * 3 

    } 
    return UITableViewAutomaticDimension 
} 
+2

Для тех, кто пытался использовать UITableViewAutomaticDimension * 3, не надо. Он возвращает -1 как только сигнал к tableView, чтобы сделать его по умолчанию. Используйте фактический номер – Ryan

+1

. Очень легко получить старые подписи для этих методов, когда вы копируете примеры из других источников - как и все мы! В некоторых случаях XCode генерирует ошибку, если Swift достаточно перемещается, чтобы сделать вещи недействительными, но для таких случаев вы получаете предупреждение. Вот вы не должны игнорировать эти желтые треугольники. Автозаполнение должно дать вам правильную подпись, а затем остальная часть функции, скорее всего, будет в порядке. – Russell

Смежные вопросы