Проблема:
У меня есть UITableViewCell, слово которого переносит текст при его первом появлении, но если вы повернетесь в альбомную ориентацию и снова вернетесь к портретной ориентации, текст будет обрезан!Почему это или как я могу это исправить?
Дополнительная информация:
Моя ячейка имеет стиль UITableViewCellStyleSubtitle.Чтобы обернуть текст в текст (textLabel UITableViewCellStyleSubtitle, а не detailTextLabel), я вычисляю, сколько строк в тексте, и устанавливаю это с помощью
cell.textLabel.numberOfLines
. Я не могу просто установить numberOfLines на 0, потому что когдакнопка удаления скользит, это выглядит некрасиво.Это объясняется в моем предыдущем вопросе: Текст растягивается за границы ячейки при удалении слайда
Я установил высоту надписи с помощью heightForRowAtIndexPath, но, вероятно, это не проблема, потому что еслиЯ жестко закодировал это до огромной высоты, текст все еще будет обрезаться после поворота ориентации.
Редактировать:
С момента написания этого я заметил, что моя строка reuseIdentifier былане то же самое, когда я пытался повторно использовать камеру.Исправление это улучшило ситуацию, и иногда теперь клетки в порядке.Однако иногда они все еще усекаются при вращении, а также, если я прокручиваю вниз и снова (таким образом, ячейки перезагружаются), они могут обрезать или изменять там высоту!
Код:
//This is a call back invoked by the interface when drawing the table view. This method will create a cell for each
//row and add text to each cell depending on the string retrieved from the datasource.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"SwitchCell"];
CGFloat textLabelFontSize = 19;
if (cell==nil){
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cellType"] autorelease];
// set the labels to the appropriate text for this row
cell.textLabel.text = [(Group*)[composeData objectInChosenGroupsListAtIndex:indexPath.row]groupName];
cell.textLabel.font = [UIFont systemFontOfSize:textLabelFontSize];
if ([(Group*)[composeData objectInChosenGroupsListAtIndex:indexPath.row]isDynamic]){
cell.detailTextLabel.text = NSLocalizedString(@"dynamic", @"dynamic");
}
else {
//get and set the group size
int groupSize = [(Group*)[composeData objectInChosenGroupsListAtIndex:indexPath.row]groupSize];
if (groupSize == 1)
cell.detailTextLabel.text = NSLocalizedString(@"1Contact", @"1 contact");
else
cell.detailTextLabel.text = [NSString stringWithFormat:NSLocalizedString(@"%dContacts", @"%d contacts"), groupSize];
}
}
//Calculate height (so we can hard code the number of lines, which is neccesary to avoid ugly stretching when the delete button slides in)
CGFloat width = [[self table] frame].size.width-cell.indentationWidth-50;
int section = indexPath.section;
NSString *title_string = cell.textLabel.text;
NSString *detail_string = cell.detailTextLabel.text;
CGSize title_size = {0, 0};
CGSize detail_size = {0, 0};
if (title_string && [title_string isEqualToString:@""] == NO ) {
title_size = [title_string sizeWithFont:[UIFont systemFontOfSize:textLabelFontSize]
constrainedToSize:CGSizeMake(width, 4000)
lineBreakMode:cell.textLabel.lineBreakMode];
}
if (detail_string && [title_string isEqualToString:@""] == NO ) {
detail_size = [detail_string sizeWithFont:[UIFont systemFontOfSize:18.0]
constrainedToSize:CGSizeMake(width, 4000)
lineBreakMode:cell.detailTextLabel.lineBreakMode];
}
CGFloat title_height = title_size.height;
CGFloat detail_height = detail_size.height;
CGFloat content_size = title_height + detail_height;
CGFloat height;
switch ( section ) {
case 0:
height = content_size;
break;
//Just in case
default:
height = 44.0;
break;
}
//hard code numberOfLines, to avoid ugly stretching when delete slides in
cell.textLabel.numberOfLines = title_height/[UIFont systemFontOfSize:textLabelFontSize].lineHeight;
//set height for retrieval later if neccesary
cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width, height);
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = (UITableViewCell *)[self tableView: tableView cellForRowAtIndexPath: indexPath];
return cell.frame.size.height;
}