SizetoFit 与 UIViewAutoresizingFlexibleHeight。有啥不同?

Posted

技术标签:

【中文标题】SizetoFit 与 UIViewAutoresizingFlexibleHeight。有啥不同?【英文标题】:SizetoFit versus UIViewAutoresizingFlexibleHeight. What is the difference?SizetoFit 与 UIViewAutoresizingFlexibleHeight。有什么不同? 【发布时间】:2012-11-05 03:56:06 【问题描述】:

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

在搞砸了几个小时后,我在某处读到其他人也遇到了同样的问题,并且他们使用了以下两行而不是 SizeToFit:

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

它会起作用的。好吧,我做到了,我的 UILabel 很完美。但是我仍然很好奇为什么会这样?

所以现在我的代码如下所示:

- (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】:

sizeToFit

行为:关心它的内容而不是 superview 的大小

sizeToFit 发送到没有[yourLabel setNumberOfLines:0] 的UILabel 将使标签尽可能宽以适合其文本。虽然使用[yourLabel setNumberOfLines:0],您的标签会根据其宽度将其文本分成多行,但这会使其高度尽可能大以适合其文本,它并不关心它的超级视图的边界。

autoResizingMask

行为:关注 superview 的大小而不是其内容

如果设置了 UIlabel 的 autoResizingMask,一旦它的超级视图的边界发生变化,它会首先改变它的框架,然后它会检查“我可以在我的矩形中放置更多文本吗?”基于它的相关属性(numberOfLines,字体,...)。

【讨论】:

以上是关于SizetoFit 与 UIViewAutoresizingFlexibleHeight。有啥不同?的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell`sizeToFit`中的UILabel在AutoLayout的单元格内不起作用

UILabel sizeToFit 在 iOS 8 中崩溃

sizeToFit()使用心得

为啥此代码中需要“sizeToFit”调用?

IOS UILlabel sizeToFit

sizeToFit的用法和用途