将两个标签垂直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顶部边缘和底部边缘。
那么你可以设置你的宽度最上面的底部等,但是你想要的。
请享用