uitableviewcell resizing different ios uitableview autolayout

ios - resizing - Ajuste la altura de UIView a su contenido con AutoLayout



uitableviewautomaticdimension (1)

Estoy usando la función iOS 6 AutoLayout con Masonry DSL para organizar vistas dentro de UITableViewCell. Esta es la disposición del diseño que quiero lograr:

El containerView es un contenedor virtual que debe adaptar dinámicamente su tamaño para ajustarse a su contenido. Con mi implementación actual, esto es lo que obtuve en su lugar:

Parece que containerView se centró verticalmente correctamente, pero tiene ancho y alto cero, por lo que no aparece correctamente. ¿Cómo puedo instruir a containerView para que ajuste su tamaño a su contenido? Los fragmentos de código se adjuntan a continuación.

¡Gracias!

Inicializador de UITableViewCell

- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier { if (self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier]) { self.titleLabel = [[UILabel alloc] init]; self.titleLabel.font = [UIFont boldSystemFontOfSize:[UIFont smallSystemFontSize]]; self.titleLabel.text = @"ノートタイトル"; self.coverImage = [[UIView alloc] init]; self.coverImage.backgroundColor = [UIColor carrotColor]; self.avatarImage = [[UIView alloc] init]; self.avatarImage.backgroundColor = [UIColor emerlandColor]; self.authorLabel = [[UILabel alloc] init]; self.authorLabel.font = [UIFont systemFontOfSize:[UIFont smallSystemFontSize]]; self.authorLabel.text = @"著者の名前"; self.containerView = [[UIView alloc] init]; self.containerView.backgroundColor = [UIColor lightGrayColor]; [self.containerView addSubview:self.titleLabel]; [self.containerView addSubview:self.avatarImage]; [self.containerView addSubview:self.authorLabel]; [self.contentView addSubview:self.containerView]; [self.contentView addSubview:self.coverImage]; self.selectionStyle = UITableViewCellSelectionStyleNone; [self updateConstraintsIfNeeded]; } return self; }

UITableViewCell updateConstraints

- (void)updateConstraints { [super updateConstraints]; [self.coverImage mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.contentView).with.offset(20); make.top.equalTo(self.contentView).with.offset(5); make.bottom.equalTo(self.contentView).with.offset(-5); make.width.equalTo(self.coverImage.mas_height).multipliedBy(0.75); }]; [self.containerView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.coverImage.mas_right).with.offset(10); make.centerY.equalTo(self.contentView); }]; [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.containerView); make.top.equalTo(self.containerView); }]; [self.avatarImage mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.titleLabel.mas_bottom).with.offset(5); make.left.equalTo(self.titleLabel); make.width.equalTo(@20); make.height.equalTo(@20); }]; [self.authorLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.avatarImage.mas_right).with.offset(5); make.centerY.equalTo(self.avatarImage); }]; }


Descubrí la solución a mi propia pregunta. Aparentemente, para que containerView cambie su tamaño dinámicamente, debemos asegurarnos de que cada uno de los elementos dentro de ellos esté conectado rígidamente entre sí y con los bordes de la supervista (es decir, containerView ). Por ejemplo, en VFL debería ser algo como esto: "V:|-10-[child1]-5-[child2]-5-|"

Entonces, en mi caso, agrego una nueva restricción make.bottom.equalTo(self.containerView) a avatarImage y ahora la supervista sabe cómo elevarse sola.