将两个标签垂直alignment不同的字体大小

我有一个父母的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; } 

在视图没有负载,你可以设置string标签如下:

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

输出: 在这里输入图像说明

要看看发生了什么,使标签的背景变成黄色。 你有不明确的约束。

要修复它,删除最后一个垂直约束。 你不需要它。

这里在我的testing操场上工作:

 let titleLabel = UILabel() titleLabel.setTranslatesAutoresizingMaskIntoConstraints(false) titleLabel.font = UIFont.boldSystemFontOfSize(30) titleLabel.text = "title" hostView.addSubview(titleLabel) let descriptionLabel = UILabel() descriptionLabel.setTranslatesAutoresizingMaskIntoConstraints(false) descriptionLabel.font = UIFont.boldSystemFontOfSize(20) descriptionLabel.text = "description" hostView.addSubview(descriptionLabel) let views = ["title": titleLabel, "description": descriptionLabel] NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat("|-[title]-2-[description]-(>=5)-|", options: NSLayoutFormatOptions.AlignAllFirstBaseline, metrics: nil, views: views)) NSLayoutConstraint(item: titleLabel, attribute: .CenterY, relatedBy: .Equal, toItem: hostView, attribute: .CenterY, multiplier: 1.0, constant: 0.0).active = true 

结果: 截图

你需要做的是相当简单的。 你两个标签(对象)只需要有相同的高度。

要做到这一点,你的第一个标签添加约束(例如40像素)。 完成后,select第一个AND第二个标签,然后在屏幕底部的约束菜单(左边的一个,添加新的alignment约束)中select顶部边缘和底部边缘。

那么你可以设置你的宽度最上面的底部等,但是你想要的。

请享用