我是iOS和AutoLayout的新手。 在我的一个表视图中,我的单元格包含2个标签(比如标题和副标题)
标题可能很长,所以如果需要,我希望它扩展到2行。 副标题总是有一行。
我已经制作了一些屏幕来呈现问题(我附上了链接,因为我没有足够的声望点)
让我们将第一张照片作为起点。 我想在标签之间保持恒定的8px空间(这里是问题开始的地方)我需要它们以verticaly为中心(标题和superview.top之间的空格应该等于字幕和superview.bottom之间的空格)
我能够做到这一点,但只有当标题标签有1行时。 在照片2上看起来需要什么样的约束? 在这一刻,我把它们钉在了这样:
8px between title and subtitle (varticaly) - priority 1000
16px between title and superview.top - priority 750
16px between subtitle and superview.bottom - priority 750
但它不起作用。
PS。我已将行数设置为0。
感谢您的帮助。
答案 0 :(得分:0)
UITableViewCellStyleSubtitle
内置了对自行调整大小的支持。
它将支持图像,多行标题和副标题,而无需编写或维护任何自定义代码来处理它已经可以执行的操作。
<强>更新强>
以下是使用属性文本代替4个不同“标签”替换字幕的示例:
在tableView:cellForIndexPath:
中cell.detailTextLabel.attributedText = [self attributedTextForBookSources:sourcesValue];
助手方法:
/**
The attributed text string corresponding to the referenced gospel books
@param sourcesValue An integer number representing a bitfield of gospel books that have source details for a pericope
@return The attributed string identifying the gospel book sources
*/
- (NSAttributedString *)attributedTextForBookSources:(NSInteger)sourcesValue
{
UIFont *font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline];
UIColor *textcolor = [self textColorForPericopeSource:sourcesValue & CGIPericopeSourcesMatt];
NSMutableAttributedString *books = [[NSMutableAttributedString alloc] initWithString:@"Matt " attributes:@{NSFontAttributeName : font, NSForegroundColorAttributeName : textcolor}];
textcolor = [self textColorForPericopeSource:sourcesValue & CGIPericopeSourcesMark];
[books appendAttributedString:[[NSAttributedString alloc] initWithString:@" Mark " attributes:@{NSFontAttributeName : font, NSForegroundColorAttributeName : textcolor}]];
textcolor = [self textColorForPericopeSource:sourcesValue & CGIPericopeSourcesLuke];
[books appendAttributedString:[[NSAttributedString alloc] initWithString:@" Luke " attributes:@{NSFontAttributeName : font, NSForegroundColorAttributeName : textcolor}]];
textcolor = [self textColorForPericopeSource:sourcesValue & CGIPericopeSourcesJohn];
[books appendAttributedString:[[NSAttributedString alloc] initWithString:@" John" attributes:@{NSFontAttributeName : font, NSForegroundColorAttributeName : textcolor}]];
return [[NSAttributedString alloc] initWithAttributedString:books];
}
- (UIColor *)textColorForPericopeSource:(BOOL)included
{
return included ? [UIColor darkGrayColor] : [UIColor clearColor];
}
我的代码只是隐藏或显示了一本书,但您也可以根据四个标签使用属性字符串。
任何时候您都可以使用内置样式,这通常意味着您可以在未来的iOS版本中更少地编写,维护和支持代码,并且更有可能在未来版本的iOS中使用它。
该应用的单元格自我调整大小,您可以看到它可以根据需要处理多行标题。