sizeWithFont constrainedToSize:lineBreakMode:
метод для использования. Пример того, как использовать его, ниже:
//Calculate the expected size based on the font and linebreak mode of your label
// FLT_MAX here simply means no constraint in height
CGSize maximumLabelSize = CGSizeMake(296, FLT_MAX);
CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode];
//adjust the label the the new height.
CGRect newFrame = yourLabel.frame;
newFrame.size.height = expectedLabelSize.height;
yourLabel.frame = newFrame;
Наконец, это работало. Парни спасибо.
я не заставлял его работать, потому что я пытался изменить размеры маркировки в heightForRowAtIndexPath
метод:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
и (да глупый меня), я изменял размеры маркировки для установки по умолчанию в cellForRowAtIndexPath
метод - я пропускал код, который я записал ранее:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Спасибо за это сообщение. Это помогло мне много. В моем случае я также редактирую текст в отдельном контроллере представления. Я заметил это, когда я использую:
[cell.contentView addSubview:cellLabel];
в tableView:cellForRowAtIndexPath: метод, которым представление маркировки постоянно представлялось поверх предыдущего представления каждый раз, я отредактировал ячейку. Текст стал пикселизированным, и когда что-то было удалено или изменено, предыдущая версия была видима под новой версией. Вот то, как я решил проблему:
if ([[cell.contentView subviews] count] > 0) {
UIView *test = [[cell.contentView subviews] objectAtIndex:0];
[test removeFromSuperview];
}
[cell.contentView insertSubview:cellLabel atIndex:0];
Никакое более странное разделение на уровни. Если существует лучший способ обработать это, сообщите мне.
Можно реализовать TableViewController's
(UITableViewCell *)tableView:cellForRowAtIndexPath
метод следующим образом (например):
#define CELL_LABEL_TAG 1
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *text = @"my long text";
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:identifier] autorelease];
}
CGFloat width = [UIScreen mainScreen].bounds.size.width - 50;
CGFloat height = [self textHeight:text] + 10;
CGRect frame = CGRectMake(10.0f, 10.0f, width, height);
UILabel *cellLabel = [[UILabel alloc] initWithFrame:frame];
cellLabel.tag = CELL_LABEL_TAG;
cellLabel.textColor = [UIColor blackColor];
cellLabel.backgroundColor = [UIColor clearColor];
cellLabel.textAlignment = UITextAlignmentLeft;
cellLabel.font = [UIFont systemFontOfSize:12.0f];
[cell.contentView addSubview:cellLabel];
[cellLabel release];
return cell;
}
UILabel *label = (UILabel *)[cell viewWithTag:CELL_LABEL_TAG];
label.text = text;
label.numberOfLines = 0;
[label sizeToFit];
return cell;
Также использование NSString
sizeWithFont:constrainedToSize:lineBreakMode:
метод для вычисления высоты текста.
Одна строка: ответ Криса неверен.
newFrame.size.height = maximumLabelSize.height;
должно быть
newFrame.size.height = expectedLabelSize.height;
В остальном это правильное решение.
Вы двигались в правильном направлении. Все, что вам нужно сделать, это:
myUILabel.numberOfLines = 0;
myUILabel.text = @"Enter large amount of text here";
[myUILabel sizeToFit];