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.