我正在以编程方式创建包含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];
由于
答案 0 :(得分:2)
由于您使用setTranslatesAutoresizingMaskIntoConstraints = NO
我假设您想要使用VFL。
在你的情况下,我认为最简单的方法是在你的XIB中设置Autolayout,但如果你没有,你可以使用VFL。
您可以在此处阅读相关内容 - VFL
此处包含代码示例VFL Tutorial
祝你好运答案 1 :(得分:0)
为所有三个标签设置相同的框架坐标。
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和frame3只有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];
这可能对你有帮助。