2016-06-17 4 views
0

UIlabelをUIViewクラスに追加しようとしています。 次の形式にする必要があります-15 - ラベル(最大幅まで伸ばします)-15。AwakeFromNib自動レイアウトUIl​​abelを両側の間隔にプログラムで伸ばします

トップ間隔= 15、次のコードで30

2つの問題に固定され、高さ: - 1)ラベルは、最大幅 2にストレッチしない)テキスト場合は右側の間隔は、表示されません。それは長すぎる。

-(void)awakeFromNib{ 
    [super awakeFromNib]; 
    view1 =[[UILabel alloc] init]; 

    view1.translatesAutoresizingMaskIntoConstraints=NO; 

    [self addSubview:view1]; 
    view1.text= @"Hello"; 

    NSDictionary *constraintViews= 
    @{@"view1":view1}; 
    NSDictionary *[email protected]{@"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

1)

  • 更新ので様水平制約:

    [view1 setContentHuggingPriority:UILayoutPriorityHigh forAxis:UILayoutConstraintAxisHorizontal]; 
    
:以下の行を追加

[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-spacing-[view1][email protected]|" options:NSLayoutFormatAlignAllCenterX metrics:metrics views:constraintViews]; 
  • 試し

    2)私は、デフォルトではラベルのnumberOfLinesプロパティを0に設定しているため、テキストを2行以上表示する必要がある場合はラベルが垂直方向に自動サイズ変更されます。言っていることを、あなたは一定の高さの制約を削除する必要があるだろうし、ラベルがそうのようにそれの内容のサイズになります。

    view1.numberOfLines = 0; 
    NSArray *vConstraints=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-spacing-[view1]" options:0 metrics:metrics views:constraintViews]; 
    

    私はこのことができます願っています。

  • +0

    水平方向の拘束はまだ機能しません。リーディング側で15の間隔を示しますが、トレーリング側では15の間隔を示します。 – andyPaul

    +0

    その制約の優先度を1000(必須)に増やしてみてください。 [NSLayoutConstraint constraintsWithVisualFormat:@ "H:| - 散布 - [view1] - 散布@ 751- |"オプション:NSLayoutFormatAlignAllCenterXメトリック:メトリックビュー:constraintViews]; – user4955208

    +0

    それでも動作しませんでした。私はなぜ左側に正しい間隔が表示されていないのですか、右側にはスペースがありません – andyPaul

    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]]; 
    } 
    
    関連する問題