Как получить ширину Custom TableviewCell, используя классы Autolayout и Size

Я использую Any-Any Size в Storyboard и определяю следующие ограничения для UITableViewCell,

  1. Ведущее пространство для SuperView -16.00px
  2. Завершающий пробел перед SuperView -16.00px
  3. Верхнее пространство для SuperView 0.00px
  4. Нижнее пространство для SuperView 0.00px

Когда я печатаю рамку UITableViewCell для всех размеров iphone, я получаю размер рамки

BookTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"BookTableViewCellID"];
if (cell==nil) {
   cell = [[BookTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"BookTableViewCellID"];
} 
NSLog(@"TextView Cell Frame %@ ",NSStringFromCGRect( cell.contentView.frame));

И вывод, рамка ячейки textView {{0, 0}, {600, 44}}. Здесь ширина равна 600, что совпадает с шириной для Any-Any Size.

Но для iPhone5 я ожидаю, что ширина здесь будет 320. Как я могу получить ширину с автоматическим изменением размера UITableViewCell.


person Rabindra Nath Nandi    schedule 07.04.2015    source источник
comment
зачем вам ширина ячейки?   -  person thorb65    schedule 07.04.2015
comment
Вы имеете в виду высоту?   -  person Fogmeister    schedule 07.04.2015
comment
Я сталкиваюсь с аналогичной проблемой для UITextView, которая находится в этой Custom TableViewCell. Мне нужно изменить высоту ячейки в соответствии с размером textviewContent Size . Но ширина textView не меняется. Он всегда возвращает 501.00.   -  person Rabindra Nath Nandi    schedule 07.04.2015
comment
Кроме того, вы не должны устанавливать ограничения между ячейкой и табличным представлением. Вам нужны только ограничения внутри ячейки.   -  person Fogmeister    schedule 07.04.2015
comment
Ячейка автоматически соответствует tableView. Не нужны ограничения   -  person Rabindra Nath Nandi    schedule 07.04.2015
comment
Если вы сделаете cell.contentView.frame = self.tableView.bounds; Затем он будет регистрировать - кадр ячейки TableView {{0, 0}, {320, 568}} - кадр ячейки TableView iPhone 5s {{0, 0}, {375, 667}} - iPhone 6   -  person Uttam Sinha    schedule 07.04.2015


Ответы (1)


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

Моя проблема возникла из-за преобразования раскадровки, изначально настроенной в XCode 4.7 для iOS 6, в xCode 7 для iOS 9 (которая, как я понимаю, такая же, как xCode 6 и iOS 8). Все отлично работало со старым размером iPhone в Simulated Metrics, но я столкнулся с аналогичной проблемой при преобразовании всего в размер 600x600 для нового Autolayout.

У меня были правильно изменены размеры и интервалы всех моих подпредставлений, но кадр, который я добавлял к своим пользовательским UITableViewCells, рисовался неправильно: левое поле было правильным, как и высота, но кадр отрисовывался за пределы экрана вправо. Проблема заключалась в том, что все подпредставления в ячейке (UILabel и UISwitch) отображались в правильных местах.

Это привело меня к пониманию, что, как и в случае с OP, я добавлял подслой, который рисовал мой кадр, в cellForRowAtIndexPath. По-видимому, с шаблонами размером 600x600 в новом Autolayout ширина UITableViewCell еще не установлена ​​после dequeReusableCellWithIdentifier, но позже в настройке. Это заставило меня понять, что мы, вероятно, не должны делать ничего, связанного с размерами ячейки в cellForRowAtIndexPath, а просто устанавливать свойства и еще много чего, если только я полностью этого не понимаю.

Решение: реализовать подкласс UITableViewCell и рисовать все в drawRect. К тому времени все ваши ограничения должны быть установлены правильно.

person paulmrest    schedule 08.11.2015