ios autolayout uinavigationbar uibarbuttonitem

ios - Autolayout dentro de la vista personalizada de UIBarButtonItem



uinavigationbar (0)

Tengo un problema extraño con UIBarButtonItem . Estoy creando uno con una vista personalizada, y la vista es de mi propio tipo MyCustomView . Contiene un par de etiquetas y algunas otras subvistas. Cada vez que uso el diseño automático en esta clase de vista personalizada para diseñar las subvistas, ¡el botón se muestra en la esquina superior izquierda de la pantalla! Puedes verlo en la imagen a continuación: MyCustomView solo tiene una subvista con fondo gris y yo uso el diseño automático para estirarlo y llenar el MyCustomView principal:

Cuando no uso el autolayout todo está bien y el botón se muestra normalmente:

¿Alguien puede explicarme qué está pasando aquí y puedo usar el diseño automático en las vistas personalizadas que se colocarán en UIBarButtonItem (tal vez no en el nivel superior)?

ACTUALIZACIÓN: esto sucede después de que lo hago

self.translatesAutoresizingMaskIntoConstraints = NO;

en MyCustomView : en la vista superior que debe colocarse en el botón de la barra. Lo estoy haciendo para que el sistema llame a mi método intrinsicContentSize . Supongo que usar el viejo sizeThatFits: lugar todavía estaría bien.

ACTUALIZACIÓN 2: Aquí está el código de prueba:

UIControl *cus = [[UIControl alloc] initWithFrame:CGRectMake(0, 0, 22, 22)]; // uncomment the following line to mess everything //cus.translatesAutoresizingMaskIntoConstraints = NO; cus.backgroundColor = [UIColor redColor]; UILabel *label = [UILabel new]; label.translatesAutoresizingMaskIntoConstraints = NO; label.text = @"Q"; [label sizeToFit]; label.font = [UIFont systemFontOfSize:18]; [cus addSubview:label]; NSLayoutConstraint *centerX1 = [NSLayoutConstraint constraintWithItem:cus attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:label attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]; NSLayoutConstraint *centerY1 = [NSLayoutConstraint constraintWithItem:cus attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:label attribute:NSLayoutAttributeCenterY multiplier:1 constant:0]; [cus addConstraints:@[centerX1, centerY1]]; UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:cus]; controller.navigationItem.rightBarButtonItem = barButton;

Me gustaría obtener explicaciones para entender lo que está pasando.