SizetoFit与UIViewAutoresizingFlexibleHeight。有什么不同?

时间:2012-11-05 03:56:06

标签: ios uitableview

我一直被告知,如果我有一个带有动态文本内容的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;
}

1 个答案:

答案 0 :(得分:4)

<强> sizeToFit

行为:关注其内容超过superview的大小

sizeToFit发送到没有[yourLabel setNumberOfLines:0]的UILabel会使标签尽可能宽,以适应它的文本。使用[yourLabel setNumberOfLines:0]时,你的标签会根据文本的宽度将文本分解为多行,但是这会使它的高度尽可能大,以适应它的文本,它并不关心它的超视图的界限。

<强> autoResizingMask

行为:关注superview的内容大小

如果设置了UIlabel的autoResizingMask,一旦它的superview的边界发生变化,它将首先改变它的帧,然后检查“我可以在我的矩形中添加更多文本吗?”基于它的相对属性(numberOfLines,font,...)。