设置AutoLayout约束以对齐多行标签

时间:2015-08-24 15:04:29

标签: ios autolayout

我是iOS和AutoLayout的新手。 在我的一个表视图中,我的单元格包含2个标签(比如标题和副标题)

标题可能很长,所以如果需要,我希望它扩展到2行。 副标题总是有一行。

我已经制作了一些屏幕来呈现问题(我附上了链接,因为我没有足够的声望点)

http://i61.tinypic.com/fusx9s.png

http://i60.tinypic.com/b4sxme.png

让我们将第一张照片作为起点。 我想在标签之间保持恒定的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。

感谢您的帮助。

1 个答案:

答案 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中使用它。

该应用的单元格自我调整大小,您可以看到它可以根据需要处理多行标题。

Composite Gospel app screenshot