ios objective-c uiimageview autolayout xib

ios - Usar restricciones de forma programática para centrar un UIIMageView



objective-c autolayout (1)

Trata eso :

// Width constraint [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.logoImage attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeWidth multiplier:0.5 constant:0]]; // Height constraint [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.logoImage attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeHeight multiplier:0.5 constant:0]]; // Center horizontally [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.logoImage attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0]]; // Center vertically [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.logoImage attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0.0]];

Estabas tratando de definir restricciones entre tu UIImageView y tu controlador de vista. Debe definir restricciones entre las vistas que son subvistas de una misma vista.

Estoy trabajando en un proyecto de iOS en el que necesito usar restricciones de manera programática para mis vistas. Estoy acostumbrado a los guiones gráficos, pero estoy usando xibs para este proyecto en particular debido a la naturaleza de la especificación del proyecto.

Tengo un MainViewController , en el cual creo las siguientes propiedades en el archivo .h:

@property (nonatomic, strong) IBOutlet UIImageView *backgroundImageView; @property (nonatomic, strong) IBOutlet UIImageView *logoImage;

Agregué estas instancias de UIImageView a mi archivo XIB y seleccioné las imágenes apropiadas a través del inspector de atributos.

En mi archivo .m, tengo un método addConstraints , que se llama en viewDidLoad . Dentro de este método, me aseguro de desactivar la conversión de Masteringizing en restricciones:

self.backgroundImageView.translatesAutoresizingMaskIntoConstraints = NO; self.logoImage.translatesAutoresizingMaskIntoConstraints = NO;

Luego, configuré restricciones para que la imagen de fondo ocupe la totalidad de la supervista:

id mainView = @{@"background": self.backgroundImageView}; //Set constraints so that the background takes up the entirety of the superview [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[background]|" options:0 metrics:nil views:mainView]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[background]|" options:0 metrics:nil views:mainView]];

Finalmente, establezco restricciones para que la vista del logotipo esté en el centro de la vista (que es donde me estoy equivocando):

// Width constraint [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.logoImage attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeWidth multiplier:0.5 constant:0]]; // Height constraint [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.logoImage attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeHeight multiplier:0.5 constant:0]]; // Center horizontally [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.logoImage attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0]]; // Center vertically [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.logoImage attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0.0]];

El error que recibo es *** +[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]: Constraint items must each be an instance of UIView or subclass'' , que no entiendo del todo, como mi Los elementos de restricción (dos instancias de UIImageView ) son subclases de UIView , pero puedo estar malinterpretando esto. ¿Alguien puede ayudarme a señalar dónde me estoy equivocando?