2016-04-15 7 views
2

Ich möchte UILabel Einschränkungen von UIView bekommen, aber ich kann keine Einschränkungen erhalten. stelle ich die Einschränkungen in CustomView.m wie folgt aus:Wie bekomme ich Constraints von UIView Programmatisch

- (id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     _titleLabel = [UILabel new]; 
     [self addSubview:_titleLabel]; 
    } 
    return self; 
} 

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    _titleLabel.translatesAutoresizingMaskIntoConstraints = NO; 
    NSLayoutConstraint *titleLabelBottom = [NSLayoutConstraint constraintWithItem:_titleLabel 
               attribute:NSLayoutAttributeBottom 
               relatedBy:NSLayoutRelationEqual 
               toItem:self 
               attribute:NSLayoutAttributeCenterY 
              multiplier:1 
               constant:0]; 
    [self addConstraints:@[titleLabelBottom]]; 

    ...more code 

} 

in ViewController.m

CustomView *view = [CustomView alloc] initWithFrame:viewFrame]; 
NSLog(@"%@",view.titleLabel.constraints); // nil 
+1

'layoutSubviews:' wird oft aufgerufen, und Sie erstellen immer eine neue Einschränkung. Verschieben Sie die Constraint-Erstellung in Ihren Initialisierer. – tgyhlsb

Antwort

2

Sie Einschränkungen in NSArray wie

NSArray *constraintArr = self.backButton.constraints; 
NSLog(@"cons : %@",constraintArr); 

Und Sie können Instanz festgelegt bekommen variabel wie,

NSLayoutConstraint *titleLabelBottom;

und dann verwenden,

titleLabelBottom = [NSLayoutConstraint constraintWithItem:_titleLabel 
              attribute:NSLayoutAttributeBottom 
              relatedBy:NSLayoutRelationEqual 
              toItem:self 
              attribute:NSLayoutAttributeCenterY 
             multiplier:1 
              constant:0]; 
[self addConstraints:@[titleLabelBottom]]; 

so können Sie titleLabelBottom überall in der Klasse verwenden.

Hoffnung, das wird helfen :)

+0

Sie gibt die Constraints zurück, die nur in dieser Ansicht platziert werden. Zum Beispiel, wenn Sie Constraint '' 'height = 0.5 * superview.height''' haben - Sie werden es in diesem Array nicht sehen –

1

Du Null bekommen, weil die Einschränkung noch nicht erstellt worden ist.

Versuchen Sie, Ihre Einschränkungen in der Anmeldung:

- (void)viewDidLayoutSubviews; 

Assumming diese Einschränkung zu Ihrer Custom wesentlich ist, können Sie diese Einschränkung in Ihrer Initwithframe-Methode Methode erstellen soll.