2015-05-04 2 views
0

Я пытаюсь изменить размер метки при выборе моей настраиваемой ячейки (чтобы она расширялась, чтобы было видно больше текста).Изменение высоты метки пользовательской ячейки внутри didSelectRowAtIndexPath

Я, очевидно, пропустил что-то фундаментальное, потому что рамка точно такая же, как только я попытаюсь нарисовать новый CGRect.

Вот соответствующий код:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let indexPath = tableView.indexPathForSelectedRow() 
    let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as! BasicCell 
    UIView.animateWithDuration(0.3) { 
     tableView.beginUpdates() 
     currentCell.subtitleLabel!.frame = CGRectMake(currentCell.subtitleLabel!.frame.origin.x, currentCell.subtitleLabel!.frame.origin.y, currentCell.subtitleLabel!.frame.size.width, 100) 
     currentCell.subtitleLabel!.numberOfLines = 0 
     tableView.endUpdates() 
    } 
} 

Любая помощь будет оценена.

+0

Попробуйте добавить Bool к пользовательской ячейке и в методе heightForRowAtIndexPath установить высоту ячейки contentSize.height иначе tableView.rowHeight –

ответ

1

Вы должны использовать

-reloadRowsAtIndexPaths:withRowAnimation: 

внутри beginUpdate и endUpdate пары. Простое задание фрейма недостаточно для представления в таблице, чтобы узнать, какая ячейка нуждается в обновлении.

Также нет необходимости размещать ваш код обновления внутри блока анимации. Он анимирован по своей сути.

+0

Так, кстати, я пытавшийся 'tableView.reloadRowsAtIndexPaths ([indexPath!], WithRowAnimation: UITableViewRowAnimation.None) 'before и думал, что он не работает, потому что ярлык, похоже, не обновляется. Но, возвращаясь и проверяя рамки, он действительно меняет рамку. Теперь я должен выяснить, что происходит с ярлыком, который не обновляется. Спасибо за ответ. – allocate

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