UIView e intrinsicContentSize

¿Un UIView crea un contenidoContinSize?

Creo una UIView contentView. No le doy el tamaño de las restricciones:

 UIView *contentView = [UIView new]; [contentView setTranslatesAutoresizingMaskIntoConstraints:NO]; contentView.backgroundColor = [UIColor orangeColor]; 

Creo otra UIView subview01. Le doy el tamaño de las restricciones y lo agrego a mi contenido:

 UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; [imageView setTranslatesAutoresizingMaskIntoConstraints:NO]; imageView.userInteractionEnabled = TRUE; imageView.backgroundColor = [UIColor clearColor]; [imageView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[imageView(WIDTH)]" options:0 metrics:@{@"WIDTH" : [NSNumber numberWithFloat:imageSize.width]} views:NSDictionaryOfVariableBindings(imageView)]]; [imageView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[imageView(HEIGHT)]" options:0 metrics:@{@"HEIGHT" : [NSNumber numberWithFloat:imageSize.height]} views:NSDictionaryOfVariableBindings(imageView)]]; [contentView addSubview:imageView]; 

contentView does no gana ningún tamaño. Pensé que el contenido intrinsicContentSize se supone que debe calcular el tamaño necesario para mostrar todas las subvenciones y cambiar su tamaño. ¿Cómo cambiará el tamaño de un UILabel para mostrar todo su text?

No, una UIView no tiene un tamaño de contenido intrínseco. Los botones y las tags sí lo hacen, ya que es fácil para el sistema calcular ese tamaño en function de la cadena o de la image en ellos. Para una UIView, generalmente necesita 4 restricciones para describir completamente su position y tamaño.

Si bien no es una solución perfecta, descubrí una forma de imitar el contenido intrinsicContentSize .

Puse el NSLayoutAttributeRight la vista del contenedor en el NSLayoutAttributeRight de la mayoría de la vista NSLayoutAttributeRight y hago lo mismo para NSLayoutAttributeBottom con el NSLayoutAttributeBottom de la sub visión más NSLayoutAttributeBottom .

 [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:rightSubView attribute:NSLayoutAttributeRight multiplier:1 constant:0]]; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:bottumSubView attribute:NSLayoutAttributeBottom multiplier:1 constant:0]];