AwakeFromNib自动布局以编程方式将UIlabel拉伸到两侧

时间:2016-06-17 03:57:16

标签: ios objective-c autolayout

我正在尝试将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];
}

2 个答案:

答案 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]];
}