Я расстроился этим вопросом пару дней. Я пытаюсь добавить UILabel в UITableViewCell. Я хочу, чтобы UILabel охватывал всю ширину ячейки, минус 5 или 10 на правой и левой сторонах для образов. Моя проблема заключается в программном определении размера рамки ячейки, в которой нужно разместить метку. Независимо от того, какой UITableViewStyle я использую, значение cell.contentVew.frame.size.width не находится рядом с шириной самого кадра ячейки.
Например, в таблице, которую я создаю, я могу достичь желаемого результата, создав подкласс UITableViewCell и создав UILabel с определенной вручную шириной (путем проб и ошибок):
CGRectMake(10, 12, 397, self.contentView.frame.size.height);
Но это тот номер 397, который меня раздражает. Я хочу способ программно определить, каким он должен быть для любой ширины таблицы или стиля. Это должен быть простой процесс, просто определив ширину всего кадра ячейки, а затем вычтя 10 или 20, чтобы края UILabel фактически не касались края ячейки.
Однако, если я установлю tableViewStyle на UITableViewStyleDefault, а затем попробую:
NSLog(@"Width: %f", self.contentView.frame.size.width);
Я получаю 320. Если я установлю стиль для любого из трех других стилей, возвращаемое число будет 302. Даже число 320 не находится рядом с шириной рамки ячейки (как с моим вручную определенным числом 397 ).
Какое значение мне нужно получить, чтобы вернуть всю ширину рамки рисования ячейки? Я уверен, что, как и в случае с большинством неприятных проблем, решение заставит меня хотеть ударить себя по лбу, но я до такой степени, что готов к этому сейчас.
РЕДАКТИРОВАТЬ для получения дополнительной информации:
Одно разъяснение для всех, кто заинтересован. Этот мой вопрос относится главным образом к таблице сгруппированных стилей. Для простого стиля ответ на мой вопрос выше может быть определен просто в методе cellForRowAtIndexPath:
CGFloat cellWidth = [tableView rectForRowAtIndexPath:indexPath].size.width;
Проблема, с которой я столкнулся, заключается в том, что метод rectForRowAtIndexPath возвращает ширину рамки, в которой рисуется ячейка, что хорошо для простой таблицы стилей, поскольку ширина ячейки равна всей ширине рамки. Однако в сгруппированной таблице ширина ячейки меньше ширины кадра, в котором она нарисована, поэтому этот метод вернет число, которое немного шире, чем ширина ячейки. Возможно, что ширина ячейки в стиле сгруппированных таблиц является фиксированным числом, меньшим ширины рамки таблицы, поэтому это может быть способом решения проблемы. Я исследую это и отвечу на свой вопрос здесь, если это так.