以编程方式约束表格单元格中的 UILabel

Posted

技术标签:

【中文标题】以编程方式约束表格单元格中的 UILabel【英文标题】:Programmatically constrain UILabels in Table Cell 【发布时间】:2014-04-12 04:26:19 【问题描述】:

我正在以编程方式创建带有 3 个标签和一个图像的 UITableViewCells。 现在,我所有的标签都是重叠的,并且单元格的高度是固定的。

想要的效果是在左侧有一个固定大小的图像,标签从屏幕左侧 75 点开始,每行一个。

这就是我想要的:

_____ | | Label 1 | img | Label 2 with potentially multi-line text |_____| Label 3 我不确定使标签相互堆叠并根据三个标签组合高度调整单元格大小的最佳方法。

self.title = [[UILabel alloc] initWithFrame:frame];
[self.title setLineBreakMode:NSLineBreakByWordWrapping];
[self.title setTextColor:[UIColor colorWithRed:21/255 green:32/255 blue:48/255 alpha:1]];
[self.title setFont:[UIFont fontWithName:@"HelveticaNeue" size:14.0f]];
[self.title setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.title setNumberOfLines:0];
[self.contentView addSubview:self.title];

self.description = [[UILabel alloc] initWithFrame:frame];
[self.description setLineBreakMode:NSLineBreakByWordWrapping];
[self.description setTextColor:[UIColor colorWithRed:21/255 green:32/255 blue:48/255 alpha:0.7]];
[self.description setFont:[UIFont fontWithName:@"HelveticaNeue" size:12.0f]];
[self.description setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.contentView addSubview:self.description];
[self.description setNumberOfLines:0];

self.user = [[UILabel alloc] initWithFrame:frame];
[self.user setLineBreakMode:NSLineBreakByWordWrapping];
[self.user setTextColor:[UIColor colorWithRed:136/255 green:136/255 blue:136/255 alpha:1]];
[self.user setFont:[UIFont fontWithName:@"HelveticaNeue" size:10.0f]];
[self.user setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.user setNumberOfLines:0];
[self.contentView addSubview:self.user];

谢谢

【问题讨论】:

【参考方案1】:

由于你使用了setTranslatesAutoresizingMaskIntoConstraints = NO,我假设你想使用 VFL。

在你的情况下,我认为最简单的方法是在你的 XIB 中设置 Autolayout,但如果你没有,你可以使用 VFL。

你可以在这里阅读 - VFL

或者这里有代码示例VFL Tutorial

祝你好运

【讨论】:

VFL,看起来很有希望。首先我听说过。 谢谢你的链接,我一直不明白怎么写。自动布局的 XIBs 规则。【参考方案2】:

您为所有三个标签设置相同的框架坐标。

self.title = [[UILabel alloc] initWithFrame:frame];

所以你必须为每个标签设置三个不同的框架。

self.title = [[UILabel alloc] initWithFrame:frame1];
self.title = [[UILabel alloc] initWithFrame:frame2];
self.title = [[UILabel alloc] initWithFrame:frame3];

其中 frame1、frame2 和 frame 3 只有不同的 y 坐标值。

frame2 = [75,"any constant value",70,10];
frame2 = [75,label1.frame.origin.y + 5,70,10];
frame3 = [75,label2.frame.origin.y + 5,70,10];

这对你有帮助吗?

【讨论】:

以上是关于以编程方式约束表格单元格中的 UILabel的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式动态调整多行 UILabel 和随附的表格视图单元格

根据表格视图单元格中的内容更改 uilabel 高度

iOS:自定义表格视图单元格中的约束

如何以编程方式删除表格视图单元格中的 UIView?

以编程方式开始在另一个表格视图单元格中编辑 UITextField

动态表格视图单元格,以编程方式更改子视图高度