2016-10-25 3 views
1

Интересно, как я правильно обновляю ограничение tableviewcell?Swift как правильно обновить ограничение UITableViewCell

В моем приложении я проверяю, использует ли пользователь iphone 6/7 или iphone 6/7 Plus, и в зависимости от этого мне нужно изменить некоторые ограничения.

я сделал подкласс UITableViewCell, как это:

class MyTableViewCell: UITableViewCell { 

} 

Должен ли я изменить ограничение в prepareForReuse() или в другом методе?

override func prepareForReuse() { 
     super.prepareForReuse() 
     myConstraint.constant = someNewVal 
    } 
+0

Ваше сообщение не очень ясно, чего вы пытаетесь достичь. если вы хотите изменить ограничения, зависит от 6/7 +, как о других моделях. Если вы хотите, чтобы ваш размер содержимого соответствовал всем устройствам. Вам нужен другой подход, проверьте это как http://stackoverflow.com/questions/40216729/auto- настроить-custom-uitableviewcell-and-label-in-it-to-text/40221431 # 40221431 – Joe

+0

@Joe Извините за мой плохой ответ. У меня есть некоторые настройки contraints для моего tableviewCell, и мне интересно, в каком методе я должен сменить ограничения. – user2636197

+0

Попробуйте this.manual настройки ограничений для ведущего и конечного пространства для вашего label.done задайте любые ограничения для ширины. Это даст динамическую высоту и запрограммирует ширину в зависимости от размера устройства. Это простой способ исправить вашу проблему. В другом месте вы установили свой cell.textlabel.numberOfLines = 0 и cell.sizeToFit(). это работает ... – Joe

ответ

2

Из документов о prepareForReuse:

Если объект UITableViewCell можно использовать повторно, то есть, он имеет идентификатор-это повторное использование метод вызывается непосредственно перед тем, возвращается объект из метода dequeueReusableCellWithIdentifier UITableView :. По соображениям производительности вы должны только сбросить атрибуты ячейки, которые не связаны с контентом, например, альфа, редактирование и состояние выбора. Делегат табличного представления в tableView: cellForRowAtIndexPath: всегда должен перезагружать все содержимое при повторном использовании ячейки. Если у объекта ячейки нет связанного идентификатора повторного использования, этот метод не вызывается. Если вы переопределите этот метод, вы должны обязательно вызвать реализацию суперкласса.

Таким образом, вы можете использовать prepareForReuse, но из-за соображений производительности, было бы лучше использовать tableView:cellForRowAtIndexPath: .

Если я понял документы, prepareForReuse должен быть как можно быстрее, так что dequeueReusableCellWithIdentifier: будет быстро. Таким образом, было бы лучше изменить ограничения по другому методу (tableView:cellForRowAtIndexPath: )

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