В настоящее время я пытаюсь получить UITableView для использования пользовательских высот ячеек на основе текста в массиве. Проблема, которую я вижу, заключается в том, что текст, кажется, сжимается вместе в точке, а не заполняет всю длину пользовательской ячейки. Это приводит к тому, что текст перекрывается над ячейками, иногда исчезая под ними.
Вот код, который у меня есть для определения высоты ячейки, я не уверен в стандартной высоте текста UILabel, но, похоже, это хорошо работает при высоте I для шрифта.
if (indexPath.section == 0) {
NSString *text = [[self.recipeDict objectForKey:@"Ingredients"] objectAtIndex:[indexPath row]];
CGSize constraint = CGSizeMake(320 - (10 * 2), 20000.0f);
CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
CGFloat height = size.height;
return height + 20;
}
Также на случай, если создание ячеек или помешает моей проблеме, или просто поможет вам узнать, что происходит, вот и это.
UITableViewCell *cell;
UITableViewCell *ingredientCell;
UITableViewCell *methodCell;
if (indexPath.section == 0) {
UILabel *ingredientText;
static NSString *ingredientCellIdentifier = @"Ingredient Cell";
ingredientCell = [tableView dequeueReusableCellWithIdentifier: ingredientCellIdentifier];
if (ingredientCell == nil)
{
ingredientCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: ingredientCellIdentifier] autorelease];
ingredientText = [[UILabel alloc] initWithFrame:CGRectMake(15, 7, 290, 44)];
[ingredientText setLineBreakMode:UILineBreakModeWordWrap];
[ingredientText setNumberOfLines:0];
[ingredientCell.contentView addSubview:ingredientText];
ingredientText.tag = 1;
[ingredientText release];
ingredientCell.contentMode = UIViewContentModeRedraw;
}
ingredientText = (UILabel*)[ingredientCell viewWithTag:1];
ingredientText.text = [[self.recipeDict objectForKey:@"Ingredients"] objectAtIndex: indexPath.row];
[ingredientText sizeToFit];
return ingredientCell;
}
Это моя вторая попытка решить эту проблему, но, похоже, она выходит за рамки моих нынешних способностей, поэтому я приветствую мудрость, приобретенную благодаря опыту.
ОБНОВЛЕНИЕ -
После дальнейшего исследования кажется, что проблема заключается в изменении размера UTabel componentText.
Он начинается с высоты, необходимой для отображаемого текста, однако, когда эта метка перерисовывается с большей высотой для другого фрагмента текста, который требует больше строк, он никогда не сокращается снова. Кажется, что метод sizeToFit устанавливает приоритеты, используя доступную высоту, а не беря ширину и уменьшая высоту.
Сейчас я снова установил ширину после sizeToFit, который работает вокруг проблемы, но приводит к нечетному интервалу в зависимости от высоты метки.