sizeToFit 不会触发带有长字的新行
Posted
技术标签:
【中文标题】sizeToFit 不会触发带有长字的新行【英文标题】:sizeToFit doesn't trigger new line with long words 【发布时间】:2012-05-09 05:25:28 【问题描述】:我刚刚遇到了一个奇怪的问题,我有一个具有动态高度的自定义 tableview 单元格。 虽然测试这一切似乎工作正常,但现在我正在将真实内容加载到其中似乎存在一些问题。
似乎某些文本不会触发 UILabel 中的新行
正确:http://dl.dropbox.com/u/274185/Screen%20Shot%202012-05-09%20at%201.15.21%20PM.png 错误:http://dl.dropbox.com/u/274185/Screen%20Shot%202012-05-09%20at%201.15.30%20PM.png
在错误的例子中你可以看到,文本被推到了第二行,但标签的高度仍然只计算一行。
item.project = @"Another Test Project With Long Title (Admin / Project Management)";
item.project = @"测试项目(管理员/项目管理)";
我计算高度的方式是这样的:
// when creating the cell
cell.projectLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.projectLabel.numberOfLines = 0;
[cell.projectLabel sizeToFit];
// in heightForRowAtIndexPath()
CGSize projectHeight = [item.project sizeWithFont:[UIFont boldSystemFontOfSize:13.0f] constrainedToSize:CGSizeMake(320.0f, CGFLOAT_MAX) lineBreakMode: UILineBreakModeWordWrap];
我尝试更改 lineBreakMode,但这似乎没有多大帮助
编辑: 计算文本高度时似乎有问题,我使用了固定的320点,这是不正确的,使用实际宽度后高度计算正确。
CGSize projectHeight = [item.project sizeWithFont:[UIFont boldSystemFontOfSize:13.0f] constrainedToSize:CGSizeMake(cell.projectLabel.bounds.size.width, CGFLOAT_MAX) lineBreakMode: UILineBreakModeWordWrap];
【问题讨论】:
【参考方案1】:我相信 sizeToFit 只会缩小视图的大小。 您应该将标签的框架设置为足够高以容纳两行,然后调用 sizeToFit。这将在文本只有一行时缩小标签,但在文本为两行时保持其高度。
【讨论】:
在 Interface Builder 中,我的标签框架足够高,可以容纳多行。但正如你从截图中看到的那样,它只在某些情况下发生,这让我认为它与 lineBreakMode 有关系 测试UILineBreakModeCharacterWrap
看看是否属实
同样的问题,当我输出高度时,第一个高度为 32px,另一个只给出 16px。奇怪...
是标签的高度还是行的高度?与标签的高度相比,行的高度是多少?
行高是动态的,比如上一张截图的那一行,行131px,标签16px,第一张截图行189px,标签32px
以上是关于sizeToFit 不会触发带有长字的新行的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 Access 中执行触发器,在 SqlServer 数据库的表中插入新行?