uilabel sizetofit 不起作用

Posted

技术标签:

【中文标题】uilabel sizetofit 不起作用【英文标题】:uilabel sizetofit doesn't work uitableviewcell 【发布时间】:2014-05-28 11:45:21 【问题描述】:

我有一个自定义的UITableViewCell,它有两个相邻的UILabels。我需要左边的UILabel 随着文本的增长而增长,而右边的UILabel 在发生这种情况时向右移动。

我正在使用自动布局并设置了约束。然而,左边的 UILabel 永远不适合它的文本。我已经尝试过sizeToFit,但这确实;没有做任何事情。谁能告诉我哪里出错了?

我认为自动布局会根据 UILabel 的内在内容大小来增加它们?

编辑

这是我的单元格的样子:

所以左上角的标签有如下约束:

固定到左/上边缘。 宽度约束 在其右侧标注的水平间距。

右边的标签也有类似的限制。

随着最左侧标签的增长,我需要 UIImageView 和灰色标签向右移动。

【问题讨论】:

如果启用了自动布局,sizeToFit 将不起作用。你需要设置约束 我试过没有自动布局,但还是不行。我现在将上传一张关于自动布局约束的图片。 如果没有弄错sizeToFit 只会减少UILabel 的宽度。您必须定义大于文本长度的大小,或增加行数。设置文本并致电sizeToFit。每次要更新文本时都应该这样做,因为 sizeToFit 永远不会扩展 UILabel's 宽度 我所需要的只是适合其包含的文本的标签。那没有发生。我假设一旦可行,其右侧的 UILabel 和 UIImageView 将随着约束的变化而移动。 【参考方案1】:

sizeToFit 只会在其给定大小内调整自身。如果标签的大小是 (100, 30) 并且如果文本大小达到 (30, 30) 则它将其大小更改为 (30, 30).

现在,如果标签的大小是 (30, 30) 并且文本大小达到 (50, 30) 那么它将坚持分配给它的大小.简而言之,它需要 文本大小 和分配的大小中的最小值。即MIN(actualSize, textSize)

要获得所需的实际宽度,您应该使用 (NSString UIKit Additions):

 - (CGRect)   boundingRectWithSize:(CGSize)size 
                           options:(NSStringDrawingOptions)options 
                        attributes:(NSDictionary *)attributes 
                           context:(NSStringDrawingContext *)context;

很抱歉,您每次为标签分配文本时都需要这样做。

示例可以在this @Shan's SO 答案中找到。

【讨论】:

感谢您的回答。我会试试这个。

以上是关于uilabel sizetofit 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

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

设置 UILabel 对齐顶部在单元格中不起作用

UITextView sizeToFit 不起作用

label同时设置sizeToFit,NSTextAlignmentCenter不起作用

UILabel 文本对齐不起作用(Swift 4)

为啥我的 UILabel 的 AutoLayout 不起作用