¿Dónde crear restricciones de reproducción automática para subcategoría uitableviewcell?

Estoy tratando de usar autolayout para una subclase de uitableviewcell que estoy creando y agradecería algunos consejos sobre qué método colocar el código de creación de restricciones de diseño. He estado buscando y toda la información que encuentro habla sobre agregar restricciones después de agregar subvistas en el método viewDidLoad. Por lo que sé, viewDidLoad no es una opción para una subclase uitableviewcell.

Estoy usando el constructor de interfaces para crear una celda personalizada y asignarla dinámicamente en mi código. No hay nada especial allí ... Subclasifico uitableviewcell para poder agregar una vista personalizada a la celda. Una vez más, nada especialmente destrozado en la Tierra ... Mi dificultad surge cuando trato de colocar mi vista personalizada con respecto a una etiqueta que agregué a la celda en el generador de interfaces.

Este es el código para crear la vista personalizada y agregarla a la vista de contenido de la celda:

- (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];
}

Si pongo el código de restricción al final de initSelf, no pasa nada. La posición de mi _customBadge permanece en su valor predeterminado. Cuando coloco el código de restricción en layoutSubviews se aplica el posicionamiento; Pero estoy bastante seguro de que es el lugar equivocado. Aquí está el código:

- (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];
}

¿Alguien puede decirme dónde debe ir este código? Seguramente estoy creando restricciones duplicadas cada vez que ocurre un diseño.

Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta