2015-05-05 4 views
1

Я пытаюсь изменить размер таблицы viewview на основе размера UILabel, который может быть одной или несколькими линиями. Мне нужно, чтобы автозапуск включался для остальной части приложения, поэтому я не хочу отключать его, чтобы это работало. Target is iOS 7 и iOS 8.Автоматическая калибровка uitableviewcell - SWIFT

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

Проблема возникает в этом методе: calculateHeightForConfiguredSizingCell. Я поставил образец проекта на Git, чтобы вы могли видеть, что я вижу.

https://github.com/mdaymond/cellResizer

Этот пример основан на этой статье: http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout

Update Я проверил в обновлении к коду. Это ALMOST работает так, как я хочу, и рассчитываю программно, но по какой-то причине высота этикетки не совсем правильная - она ​​не требует полной высоты. Проблема с исходным кодом заключалась в том, что метке нужна явная ширина.

+0

В чем конкретно проблема? Вам не нужно отключать автоматическую компоновку. Вы можете просто не использовать его в одном месте. Вы можете даже использовать макет вручную и автоматический макет в том же представлении. – dasdom

+0

вы ориентируетесь на что-либо <чем iOS 8.0? потому что, если нет, вы можете просто установить ограничения в раскадровке и не нужно ничего вычислять вручную! –

+0

@dasdom - Проблема в том, что метка не изменяет размер и не является высотой ячейки. Целевая сборка - iOS 7 и 8 – mday

ответ

1

Здесь мы идем, если вы поддерживаете IOS 7, то вам необходимо реализовать UITableViewDelegate протокол в своем классе, а затем переопределить:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 

} 

для получения дополнительной информации о динамическом пользовательской высоте UITableViewCell, основанной на длину текста этикетки (чек это), и вы можете поместить код в функции heightForRowAtIndexPath: height based on label text length

также переопределять:

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     // example to return the estimated height 
     return 280 
    } 

Примечание: поддерживая IOS 7, вы должны обращаться с ним вручную. там нет такого простого способа, как IOS 8.

Но если вы только поддержки IOS 8 и позже, то вы можете сделать это просто в двух следующих строках:

self.tableView.estimatedRowHeight = 280 
self.tableView.rowHeight = UITableViewAutomaticDimension 
+0

В примере кода, который я вам предоставил, вы, вероятно, увидите, что у меня есть оба этих метода, и делегат. Попытайтесь попробовать ссылку, на которую вы ссылались сейчас, чтобы узнать, ведет ли она меня куда угодно. – mday

+0

Извините, но это не устраняет актуальную проблему. Связанная статья ссылается на ту же статью, о которой я упоминал выше. Спасибо за попытку! – mday

+0

@mday, Ну, как вы знаете, я пытался в последние месяцы исправить ячейку на основе высоты UILabel. выбирая его программно, вы должны делать то, что я сказал, и это достаточно, и он отлично работает со мной. помните, что IOS7 означает боль, чтобы справиться с такой задачей. – AaoIi

0

На самом деле я загрузить исходный код и делать следующие изменения. и UILabel теперь поддерживает multiline.

Шаг 1: Удалено программно вычисляет высоту строки. это означает, что вы прокомментировали heightForRowAtIndexPath в своей демонстрации.

Шаг 2: Установите следующие ограничения компоновки на UILabel в UITableViewCell.

enter image description here

Шаг 3: Установить количество линии в вашем XIb.

Выход:

enter image description here

+0

Возможно, это сработает. Попробуйте сейчас подтвердить. Тем не менее, мне нужно программно вычислить высоту, поскольку мои ячейки становятся более сложными по дороге. – mday

+0

Я проверил обновление кода. Это ПОЛНОСТЬЮ работает так, как я хочу и рассчитываю программно, но почему-то высота ячеек не совсем правильная. Проблема с исходным кодом заключалась в том, что метке нужна явная ширина. – mday

+0

@mday даже ваша ячейка слишком сложна, хотя вы можете управлять с автоматической компоновкой без программирования. –

0

Вот мой код.

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
{ 
    self.scoutPropertyTable.rowHeight = UITableViewAutomaticDimension + 35 
    return self.scoutPropertyTable.rowHeight 
}