Как обернуть текст в UITableViewCell без настраиваемой ячейки
Автор вопроса: Airsource LtdОтветов: 10
Это на iPhone 0S 2.0. Ответы на 2.1 тоже хороши, хотя я не знаю каких-либо различий в отношении таблиц.
Похоже, что должна быть возможность получить текст для переноса без создания настраиваемой ячейки, поскольку UITableViewCell по умолчанию содержит UILabel. Я знаю, что смогу заставить его работать, если создам настраиваемую ячейку, но я не пытаюсь достичь этого - я хочу понять, почему мой текущий подход не работает.
Я понял, что метка создается по запросу (поскольку ячейка поддерживает доступ к тексту и изображениям, поэтому она не создает представление данных до тех пор, пока это необходимо), поэтому, если я сделаю что-то вроде этого:
тогда я получаю действительную метку, но установка numberOfLines на ней (и lineBreakMode) не работает - я все равно получаю однострочный текст. В UILabel достаточно высоты для отображения текста - я просто возвращаю большое значение высоты в heightForRowAtIndexPath.
Краткий комментарий / ответ, чтобы записать мой опыт, когда у меня была такая же проблема. Несмотря на использование примеров кода, высота ячейки табличного представления изменялась, но метка внутри ячейки все еще не настраивалась правильно - решение заключалось в том, что я загружал свою ячейку из пользовательского файла NIB, что происходит после высота ячейки отрегулирована.
И у меня были свои настройки внутри файла NIB, чтобы не переносить текст и иметь только одну строку для метки; настройки файла NIB переопределяли настройки, которые я установил в коде.
Урок, который я получил, заключался в том, чтобы всегда помнить о состоянии объектов в каждый момент времени - возможно, они еще не были созданы! ... кто-то в очереди.
Ответ 4 · рейтинг 3 · Arshad Parwez
Если мы должны добавить только текст в ячейку UITableView, нам понадобится только два делегата для работы (не нужно добавлять дополнительные UILabels)
Здесь строка mutArr - это изменяемый массив, из которого я получаю свои данные.
РЕДАКТИРОВАТЬ: - Вот массив, который я взял.
mutArr= [[NSMutableArray alloc] init];
[mutArr addObject:@"HEMAN"];
[mutArr addObject:@"SUPERMAN"];
[mutArr addObject:@"Is SUPERMAN powerful than HEMAN"];
[mutArr addObject:@"Well, if HEMAN is weaker than SUPERMAN, both are friends and we will never get to know who is more powerful than whom because they will never have a fight among them"];
[mutArr addObject:@"Where are BATMAN and SPIDERMAN"];
Ответ 5 · рейтинг 3 · Jason
Теперь в представлениях таблиц могут быть саморазмерные ячейки. Настройте вид таблицы следующим образом
tableView.estimatedRowHeight = 85.0 //use an appropriate estimate
tableView.rowHeight = UITableViewAutomaticDimension
Обработка может быть легко выполнена в cellForRowAtIndexPath. Определите ячейку / определите шрифт и присвойте эти значения "ячейке" результата. Обратите внимание, что numberoflines установлен на "0", что означает, что нужно брать то, что нужно.
В heightForRowAtIndexPath я вычисляю высоту обернутого текста. Размер кодирования должен соответствовать ширине вашей ячейки. Для iPad это должно быть 1024. Для iPhone и iPod 320.
Это может быть, а может и не быть лучшим / стандартным подходом, но в моем случае он сработал.
Ответ 8 · рейтинг 1 · iOS
Попробуйте мой код быстро. Этот код также будет работать с обычными UILabels.
extension UILabel {
func lblFunction() {
//You can pass here all UILabel properties like Font, colour etc....
numberOfLines = 0
lineBreakMode = .byWordWrapping//If you want word wraping
lineBreakMode = .byCharWrapping//If you want character wraping
}
}
Теперь звоните просто так
cell.textLabel.lblFunction()//Replace your label name
Ответ 9 · dukz
Я думаю, что это лучшее и более короткое решение. Просто отформатируйте UILabel (textLabel) ячейки для автоматического расчета высоты, указав sizeToFit, и все должно быть в порядке.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell...
cell.textLabel.text = @"Whatever text you want to put here is ok";
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.textLabel.numberOfLines = 0;
[cell.textLabel sizeToFit];
return cell;
}
Ответ 10 · рейтинг -1 · drewh
Я не думаю, что вы можете манипулировать базовым UITableViewCell's частным UILabel, чтобы сделать это. Вы можете сами добавить новый UILabel в ячейку и использовать numberOfLines с sizeToFit, чтобы установить соответствующий размер. Что-то типа: