Erhalten Sie Rahmen in einer Ansicht nach dem autolayout

Habe ich eine Methode:

- (void)underlineTextField:(UITextField *)tf {
    CGFloat x = tf.frame.origin.x-8;
    CGFloat y = tf.origin.y+tf.frame.size.height+1;
    CGFloat width = self.inputView.frame.size.width-16;
    UIView *line = [[UIView alloc] initWithFrame:(CGRect){x,y,width,1}];
    line.backgroundColor = [UIColor whiteColor];
    [self.inputView addSubview:line];
}

Unterstreicht, dass eine Eingabe UITextField; textfield hat eine Breite, die ändert sich je nach Bildschirmbreite (nib autolayout).

Habe ich versucht, mit

[self.view setNeedsLayout];
[self.view layoutIfNeeded];

und

[self.inputView setNeedsLayout];
[self.inputView layoutIfNeeded];

bevor ich diese Methode aufrufen, die keine änderung im Ergebnis. die resultierende Linie ist deutlich breiter als das UITextField (es entspricht der ursprünglichen Größe in die Feder).

Ich will nur das daraus resultierende Bild der UITextField in der Frage nach der Verarbeitung durch das autolayout

LÖSUNG: (mit der 'Mauerwerk' Autolayout)

- (UIView *)underlineTextField:(UITextField *)tf {
    UIView *line = [[UIView alloc] initWithFrame:CGRectZero];
    line.backgroundColor = [UIColor whiteColor];
    [self.inputView addSubview:line];
    [line mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerX.equalTo(tf.mas_centerX);
        make.width.equalTo(tf.mas_width).with.offset(16);
        make.height.equalTo(@1);
        make.top.equalTo(tf.mas_bottom);
    }];
    return line;
}
InformationsquelleAutor Halpo | 2015-04-01
Schreibe einen Kommentar