У меня есть вытаскивание волос. Я просто пытаюсь создать таблицу с стилем UITableViewCellStyleSubtitle с текстом и деталями. Но детали не появляются. Обычно это происходит потому, что кто-то забыл инициализировать ячейки с правильным стилем, но в этом случае это не так. Я пробовал все четыре стили ячеек, и детали не отображаются ни в одном из них, хотя текстовая метка перемещается вправо, когда я использую UITableViewCellStyleValue2.Почему мой UITableViewCell не показывает detailTextLabel в ЛЮБОМ стиле?
Я успешно создал таблицы много раз раньше. Единственное существенное различие, которое я могу придумать в этом случае, это то, что я не использую UITableViewController. Вместо этого я внедряю UITableView, как и любое другое представление, и подключаю свой собственный источник данных и делегат.
Я сводился ключевым методом это:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Get the UITableViewCell (out of the recycling pool, or de novo)
NSString *reuseID = @"CELL";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseID];
if (not cell) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:reuseID] autorelease];
}
cell.textLabel.text = @"Foo";
cell.detailTextLabel.text = @"Bar";
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.detailTextLabel.frame = CGRectMake(10, 20, 200,22); // required
cell.detailTextLabel.font = [UIFont boldSystemFontOfSize:12]; // also required
//[cell setNeedsLayout]; (makes no difference)
return cell;
}
Я могу видеть текст подробно, только если я включаю ОБА «необходимые» строки выше (и использовать любой тип клеток, кроме по умолчанию) , и даже когда я это делаю, позиция текстовой метки полностью перекрывает положение метки метки.
Таким образом, кажется, что инициализатор создает detailTextLabel UILabel, но устанавливает его размер шрифта в ноль и его фрейм на что-то пустое или вне экрана. (Я попытался проверить их в отладчике, но это не очень полезно - размер шрифта равен нулю, а кадр пуст для BOTH textLabel и detailTextLabel, но textLabel всегда отображается нормально.)
Очевидно, что я могу обходите его, если нужно, вручную отрегулировав размеры и шрифты этикеток. Но мне очень мешает, что мне нужно сделать это в этом случае, когда обычно вы просто устанавливаете стиль, а текст и макет автоматически. Я искал googles и переполнения стека, но не могу найти ссылку на аналогичную проблему. Кто-нибудь знает, что здесь происходит?
(Тестирование под прошивкой 6.1.)
Вы используете раскадровки? Если это так, вам нужно установить свойство Subtitle в IB для ячейки. Это должно отобразить detailTextLabel. Раньше у меня была эта проблема. –
Нет, нет раскадровки или XIB, если на то пошло. Просто код. –
И я ошибся выше, когда сказал, что могу обойти это, изменив фрейм ... Я могу изменить detailTextLabel.frame, но все мои попытки изменить textLabel.Frame не имеют никакого эффекта. Истина как в cellForRowAtIndexPath, так и в tableView: willDisplayCell: forRowAtIndexPath. Сама ячейка, похоже, борется со мной в отношении textLabel и полностью игнорирует detailTextLabel. –