一直有人告诉我,如果我有一个包含动态文本内容的UILabel,则应该使用SizeToFit,因为那样可以正确地调整UILabel。我使用sizeToFit,但滚动后弄乱了UITableViewCell上的文本标签。但是,在初始屏幕加载时,它们看起来会很好。

在弄乱了几个小时之后,我读到某处有人遇到了相同的问题,他们用以下两行代替了SizeToFit:

 cell.message.lineBreakMode = UILineBreakModeWordWrap;
    cell.message.autoresizingMask = UIViewAutoresizingFlexibleHeight;

它会工作。好吧,我做到了,我的UILabels非常完美。但是我仍然很好奇为什么会这样?

所以现在我的代码看起来像:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"MessagesCustomViewCell";
    MessagesCustomViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MessagesCustomViewCell_iPhone" owner:self options:nil];
        cell = [nib objectAtIndex:0];  //you can also loop thru or manually remember positions
    }

    NSArray * discussion = [self.messages objectAtIndex:indexPath.row];

      cell.author.text = [discussion valueForKeyPath:@"author.name"];
      cell.message.text = [discussion valueForKey:@"text"]; //DYNAMIC VARIABLE SIZED TEXT


    cell.message.lineBreakMode = UILineBreakModeWordWrap;
    cell.message.autoresizingMask = UIViewAutoresizingFlexibleHeight;

    return cell;
}

最佳答案

sizeToFit

行为:关心其内容超过Superview的大小

如果不使用sizeToFit[yourLabel setNumberOfLines:0]发送到UILabel,则会使Label尽可能宽以适合其文本。虽然使用[yourLabel setNumberOfLines:0],标签会根据其宽度将其文本分成多行,但是这会使它的高度尽可能大以适合其文本,但它并不在乎其 super 视图的范围。

autoResizingMask

行为:在内容上关注 super 视图的大小

如果设置了UIlabel的autoResizingMask,则更改 super 视图的边界后,它将首先更改其框架,然后检查“我可以在矩形中放置更多文本吗?”基于它的相对属性(numberOfLines,字体等)。

关于ios - SizetoFit与UIViewAutoresizingFlexibleHeight。有什么不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13225710/

10-09 18:17