我正在尝试将UIlabel添加到UIView类。 它应采用以下格式-15-Label(拉伸到最大宽度)-15。
顶部间距= 15,高度固定为30。
以下代码存在两个问题: - 1)标签不会拉伸到最大宽度 2)如果文字太长,右侧间距不会显示。
-(void)awakeFromNib{
[super awakeFromNib];
view1 =[[UILabel alloc] init];
view1.translatesAutoresizingMaskIntoConstraints=NO;
[self addSubview:view1];
view1.text= @"Hello";
NSDictionary *constraintViews=
@{@"view1":view1};
NSDictionary *metrics=@{@"spacing":@(15)};
NSArray *hConstraints=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-spacing-[view1]-spacing-|" options:NSLayoutFormatAlignAllCenterX metrics:metrics views:allViews];
NSArray *vConstraints=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-spacing-[view1(30)]" options:0 metrics:metrics views:constraintViews];
[self addConstraints:hConstraints];
[self addConstraints:vConstraints];
}
答案 0 :(得分:0)
1)
更新水平约束,如下所示:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-spacing-[view1]-spacing@751-|" options:NSLayoutFormatAlignAllCenterX metrics:metrics views:constraintViews];
尝试添加以下行:
[view1 setContentHuggingPriority:UILayoutPriorityHigh forAxis:UILayoutConstraintAxisHorizontal];
2)我总是默认将标签的numberOfLines
属性设置为0,这样如果文本需要以两行或更多行显示,标签将垂直自动调整大小。话虽这么说,你需要删除固定的高度约束,标签将是它的内容的大小,如下所示:
view1.numberOfLines = 0;
NSArray *vConstraints=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-spacing-[view1]" options:0 metrics:metrics views:constraintViews];
我希望这会有所帮助。
答案 1 :(得分:0)
我使用这种通用方法将childView wrt的约束应用于ParentView。只需将视图传递给此方法。
+ (void)applyConstraints:(UIView *)pChildView withSuperView:(UIView *)pParentView {
pChildView.translatesAutoresizingMaskIntoConstraints = NO;
// Width.
CGFloat widthValue = pParentView.frame.size.width;
[pParentView addConstraint:[NSLayoutConstraint constraintWithItem:pChildView attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual toItem:pParentView
attribute:NSLayoutAttributeWidth multiplier:1.0 constant:widthValue]];
// Height.
CGFloat heightValue = pParentView.frame.size.height;
[pParentView addConstraint:[NSLayoutConstraint constraintWithItem:pChildView attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual toItem:pParentView
attribute:NSLayoutAttributeHeight multiplier:1.0 constant:heightValue]];
// X margin.
[pParentView addConstraint:[NSLayoutConstraint constraintWithItem:pChildView attribute:NSLayoutAttributeCenterXWithinMargins
relatedBy:NSLayoutRelationEqual toItem:pParentView
attribute:NSLayoutAttributeCenterXWithinMargins multiplier:1.0 constant:0]];
// Y margin.
[pParentView addConstraint:[NSLayoutConstraint constraintWithItem:pChildView attribute:NSLayoutAttributeCenterYWithinMargins
relatedBy:NSLayoutRelationEqual toItem:pParentView
attribute:NSLayoutAttributeCenterYWithinMargins multiplier:1.0 constant:0]];
}