ios - ¿Dónde crear restricciones de reproducción automática para subcategoría uitableviewcell?
constraints autolayout (1)
Necesitarías actualizar restricciones como:
-(void)updateConstraints{
// add your constraints if not already there
[super updateConstraints];
}
Después de agregar sus vistas a Superview, debe llamar a [self setNeedsUpdateConstraints]
para comenzar a usarlas. Al hacerlo, el tiempo de ejecución de renderización llamará a updateConstraints
en el momento adecuado.
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 ubicar mi vista personalizada con respecto a una etiqueta que agregué a la celda en el constructor 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