2011-02-04 4 views
4

В IPhone таблице ширина содержимого составляет 320 или 300 в зависимости от стиля. Однако, когда Ipad находится на сцене, мы начали использовать таблицы с разной шириной в соответствии с нашим дизайном.Настройка переменной высоты UITableViewCell на основе ее ширины - IPhone

Одна из проблем заключается в том, что в некоторых случаях мы вычисляем высоту ячейки в соответствии с ее размером текста субтитров. Высота текста зависит от ширины содержимого, а высота ячейки зависит от высоты текста. Если ширина 300 или 320, это нормально. Но подумайте, что я использую табличное представление таблицы с размером в 500 пикселей, и нет возможности рассчитать уменьшенную ширину содержимого. Из-за этой проблемы мы не можем рассчитать высоту вызова в зависимости от его содержимого.

Единственное место, где мы можем получить информацию о ширине содержимого ячейки, является подклассом метода layoutsubview. Однако heightForRowAtIndexPath вызывается перед методом layoutSubview, и у нас нет информации о ширине содержимого уменьшенной ячейки.

Так что нам нужен хороший способ рассчитать истинную ширину сгруппированной ячейки tableview стиля.

Буду рад за любую помощь.

Спасибо.

M Ali Caliskan

ответ

0

Я имел a similar problem, а именно о том, что ширина contentView ячейки таблицы не известна, когда heightForRowAtIndexPath вызывается, если у вас есть вид аксессуаров. В конце концов, не было решения, кроме жесткого кода ширины аксессуара (20px) и вычитания из обычной ширины. Я думаю, вам придется делать то же самое - жестко кодировать ширину содержимого ячейки в зависимости от ширины таблицы.

0

NSString UIKit Additons (найдено here) предоставляет множество методов для поиска размера строки, заданной для конкретного режима UIFont и разрыва строки (помните, что String, UIFont и т. Д. Могут быть получены из ваших классов моделей, поэтому все это известно перед отображением UITableView). Вы можете использовать эти методы в сочетании с вашим собственным личным интервалом/дополнением/etc. чтобы узнать желаемый размер (таким образом, ширину и высоту) UITableViewCell в то время, когда вызывается heightForRowAtIndexPath:.

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

+0

Спасибо за ваш ответ, но моя проблема заключается не в правильной функции поиска высоты строки. Мы можем найти высоту сидения, если только мы знаем ее ширину. Проблема в том, что, когда мы используем сгруппированное представление таблицы, мы не знаем ширины содержимого, так как оно уменьшено. В Iphone 320 сокращен до 300. –

+0

Итак, в соответствии со стилем tableview мы обрабатывали этот размер как жестко закодированный. Но в Ipad мы используем tableviews во многих ширинах. Например, какова будет реальная ширина содержимого сгруппированного стола шириной 500 пикс. Дельта сокращения не всегда 20 пикс. iOs делает некоторую внутреннюю математику для вычисления дельта сокращения. Я просто хочу знать это для любой ширины. –

+0

Вы проверили рамку содержимого контента UITableViewCell? Мое понимание группированных ячеек TableView в отличие от негрупповых было то, что кадр ячейки фактически не изменился. –

0

Как Джеймс упомянул и объяснил, вы можете использовать что-то вроде

UIFont *font = [UIFont systemFontOfSize:16];  
CGSize size = [TEXT_STRING sizeWithFont:font constrainedToSize:CGSizeMake(tableView.frame.size.width, 16*1000.f) lineBreakMode:UILineBreakModeCharacterWrap]; 
return size.height; 

Используйте это в делегатом heightForRowAtIndexPath:, а также в cellForRowAtIndexPath: вернуть высоту для TableCell и обновления кадра клеток.

Надеюсь, это может вам помочь.

1

Наконец-то я решил проблему ширины сгруппированного tableView. Размер заполнения, который составляет 10 (с одной стороны) для стандартной ширины 320, изменяется в соответствии с шириной по математике. Простым способом обработки этой математики является использование фиксированных значений в соответствии с диапазонами ширины. Ниже код действителен для 4.0, и я не тестировал его ни на одной другой версии iOs.

Пожалуйста, умножьте возвращаемый размер заполнения на 2, чтобы найти общее сокращение сгруппированного стиля tableView. Например, если размер paddign равен 10 для таблицы TableView шириной 320 пикселей, contentWidth равен 320 - (2.10) = 300.

CGFloat GetTableViewPaddingSize(CGFloat tableViewWidth) 
{ 
    if (tableViewWidth < 401) { 
     return 10; 
    } else if (tableViewWidth < 547) { 
     return 31; 
    } else if (tableViewWidth < 560) { 
     return 32; 
    } else if (tableViewWidth < 573) { 
     return 33; 
    } else if (tableViewWidth < 586) { 
     return 34; 
    } else if (tableViewWidth < 599) { 
     return 35; 
    } else if (tableViewWidth < 612) { 
     return 36; 
    } else if (tableViewWidth < 625) { 
     return 37; 
    } else if (tableViewWidth < 639) { 
     return 38; 
    } else if (tableViewWidth < 652) { 
     return 39; 
    } else if (tableViewWidth < 665) { 
     return 40; 
    } else if (tableViewWidth < 678) { 
     return 41; 
    } else if (tableViewWidth < 691) { 
     return 42; 
    } else if (tableViewWidth < 704) { 
     return 43; 
    } else if (tableViewWidth < 717) { 
     return 44; 
    } else { 
     return 45; 
    } 
} 
Смежные вопросы