Wo werden Autolayout-Einschränkungen für untergeordnete uitableviewcell erstellt?

Ich versuche, Autolayout für eine von mir erstellte uitableviewcell-Unterklasse zu verwenden, und ich würde mich über einige Ratschläge darüber freuen, wie der Code zum Erstellen von Layoutbeschränkungen eingefügt werden kann. Ich habe herumgesucht und alle Informationen, die ich finde, sprechen über das Hinzufügen von Einschränkungen nach dem Hinzufügen von Unteransichten in der viewDidLoad-Methode. Meines Wissens ist viewDidLoad keine Option für eine uitableviewcell-Unterklasse.

Ich verwende den Interface Builder, um eine benutzerdefinierte Zelle zu erstellen und sie in meinem Code dynamisch zuzuweisen. Dort gibt es nichts Besonderes ... Ich habe die uitableview-Zelle in eine Unterklasse unterteilt, damit ich der Zelle eine benutzerdefinierte uiview hinzufügen kann. Auch hier erschüttert nichts besonders die Erde ... Meine Schwierigkeit entsteht, wenn ich versuche, meine benutzerdefinierte Ansicht in Bezug auf eine Beschriftung zu positionieren, die ich der Zelle im Interface Builder hinzugefügt habe.

Dies ist der Code zum Erstellen der benutzerdefinierten Ansicht und zum Hinzufügen zur Inhaltsansicht der Zelle:

- (id)initWithCoder:(NSCoder *)decoder
{
    if ((self = [super initWithCoder:decoder]))
    {
        [self initSelf];
    }
    return self;
}

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]))
    {
        [self initSelf];
    }
    return self;
}

- (void) initSelf
{
    // Initialization code
    _badgeLabel = @"";

    if (!_customBadge)
    {
        _customBadge = [CustomBadge customBadgeWithString:self.badgeLabel];
    }

    // hide the badge until needed
    self.customBadge.hidden = YES;

    // add badge to the cell view hierarchy
    [self.customBadge setTranslatesAutoresizingMaskIntoConstraints:NO];
    [self.customBadge setContentHuggingPriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisHorizontal];
    [self.customBadge setContentHuggingPriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisVertical];

    [self.contentView addSubview:self.customBadge];
}

Wenn ich den Constraint-Code an das Ende von initSelf setze, passiert nichts. Die Position meines _customBadge bleibt unverändert. Wenn ich den Einschränkungscode in layoutSubviews einfüge, wird die Positionierung angewendet. aber ich bin mir ziemlich sicher, dass es der falsche Ort ist. Hier ist der Code:

- (void) layoutSubviews
{
    [self.contentView addConstraint:[NSLayoutConstraint
                                     constraintWithItem:self.customBadge
                                     attribute:NSLayoutAttributeLeft
                                     relatedBy:NSLayoutRelationEqual
                                     toItem:self.competence
                                     attribute:NSLayoutAttributeRight
                                     multiplier:1.0
                                     constant:-14.0]];

    [self.contentView addConstraint:[NSLayoutConstraint
                                     constraintWithItem:self.customBadge
                                     attribute:NSLayoutAttributeTop
                                     relatedBy:NSLayoutRelationEqual
                                     toItem:self.competence
                                     attribute:NSLayoutAttributeTop
                                     multiplier:1.0
                                     constant:0.0]];

    [super layoutSubviews];
}

Kann mir jemand sagen, wohin dieser Code gehen soll? Sicherlich erstelle ich jedes Mal, wenn ein Layout erstellt wird, doppelte Einschränkungen.

Vielen Dank

Antworten auf die Frage(1)

Ihre Antwort auf die Frage