2016-09-23 4 views
1

Мне нужно добавить ярлыки один за другим по вертикали, а их число - динамическое. На данный момент он отлично работает с этим кодом:Динамическое число элементов в TableViewCell

let numUnitsLabel = UILabel(frame: CGRectZero) 
numUnitsLabel.text = units 
numUnitsLabel.font = UIFont.boldSystemFontOfSize(28) 
numUnitsLabel.textColor = UIColor.redColor() 
numUnitsLabel.translatesAutoresizingMaskIntoConstraints = false 
cell.contentView.addSubview(numUnitsLabel) 

let topConstraint = NSLayoutConstraint(item: numUnitsLabel, attribute: .Top, relatedBy: .Equal, toItem: cell.contentView, attribute: .Top, multiplier: 1, constant: 8 * CGFloat(i+1) + CGFloat(i*25) + CGFloat(i*20) - 5) 
let rightConstraint = NSLayoutConstraint(item: numUnitsLabel, attribute: .Trailing, relatedBy: .Equal, toItem: cell.contentView, attribute: .Trailing, multiplier: 1, constant: -10) 

cell.contentView.addConstraints([topConstraint, rightConstraint]) 

Ячейка нарисована отлично. Но когда я добавляю новый элемент в список и звоню tableView.reloadData, старые ярлыки «запоминаются», и они над новыми. Недавно добавленный объект помещается в первую очередь в массив, и они похожи друг на друга ... Может быть, мой подход плох, но если у вас есть какие-либо предложения, пожалуйста, посоветуйте мне.

+0

Вы можете подклассифицировать tableviewcell и удалить subviews в методе prepareforreuse. –

+0

Хорошо, но в цикле для меня есть код выше, поэтому в основном я добавляю метку X раз. Я подклассифицировал prepareForReuse и теперь, как удалить все из них? – Slavcho

+0

Если ваши метки определены в классе, вы можете сказать numUnitsLabel.removeFromSuperview(). Если вы хотите удалить все из ячейки: для просмотра в contentView { view.removeFromSuperview() } –

ответ

1

Помните, что ячейки повторно используются, поэтому, однако, ячейка была подготовлена ​​ранее, она все еще имеет все это состояние. В частности, сохраняется его иерархия представлений (добавленные подпункты). Причиной этого является, как правило, макет таблицы Cell остается неизменным, и только его содержание предназначено для повторного набора в cellForRowAtIndexPath.

Вы используете анти-шаблон, прежде всего, поэтому вы сталкиваетесь с трудностями.

Если вы действительно хотите, чтобы очистить и повторно раскладка ячейку, удалить все подвидов явно, каждый раз, например:

https://techfuzionwithsam.wordpress.com/2014/12/23/what-is-the-best-way-to-remove-all-subviews-from-parent-viewsuper-view/

Я подозреваю, однако, (правда, это не Просмотр Кода), что ваш дизайн испорчен. В общем случае ячейки таблицы не должны расти в высоту с динамическим количеством внутренних элементов. Вам могут понадобиться вложенные таблицы (!!), на самом деле просто одна многострочная строка UITextView в каждой или таблица, структурированная по разделам с пользовательскими заголовками заголовков разделов.

+0

Да, он работал с удалением всех UIViews cell.contentView. Но я знаю, что подход плох, но, по крайней мере, это правильный ответ. – Slavcho

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