我有一个父UIView,在其中放置两个标签。每个标签只有一行,如下所示:



现在的问题是基线错误。我正在使用自动布局,问题是在这种情况下约束应如何显示?特别是标签的垂直放置。这些是我目前有的约束:

H:|-[title]-2-[description]-(>=5)-| //with NSLayoutFormatOptions.AlignAllFirstBaseline
V:|[title]|
V:|[description]|


以上约束导致


  无法同时满足约束条件。


因为居中和第一个基线约束相互抵触。标签应采用父级的完整高度,但字体大小应不同。

我试图将标签固定在顶部/底部,但这并不适用于所有情况。

我应该如何垂直放置标签?

最佳答案

可以使用AttributedString代替富文本格式使用两个不同的标签。这是一个例子:

- (NSMutableAttributedString*)getRichText {
    NSString *str1 = @"I am bold ";
    NSString *str2 = @"I am simple";

    NSMutableAttributedString *attString=[[NSMutableAttributedString alloc] initWithString:[str1 stringByAppendingString:str2]];

    UIFont *font1=[UIFont fontWithName:@"Helvetica-Bold" size:30.0f];
    UIFont *font2=[UIFont fontWithName:@"Helvetica" size:20.0f];
    NSInteger l1 = str1.length;
    NSInteger l2 = str2.length;
    [attString addAttribute:NSFontAttributeName value:font1 range:NSMakeRange(0,l1)];
    [attString addAttribute:NSFontAttributeName value:font2 range:NSMakeRange(l1,l2)];
    return attString;
}


在“查看确实加载”中,您可以将字符串设置为label,如下所示:

UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 50)];
[self.view addSubview:textLabel];
textLabel.attributedText = [self getRichText];


输出:

关于ios - 垂直对齐两个具有不同字体大小的标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30455159/

10-11 06:34
查看更多