La image estirable de keyboard personalizado iOS detiene el estiramiento.

Hice un keyboard personalizado para un UITextField, que consta de 18 botones UIB. Es una UIView que se establece como inputView del campo de text.

Los botones se crean en el método initWithFrame: método de UIView utilizando el código

 UIImage* buttonImage =[[UIImage imageNamed:@"keyboard-button-background.png"] stretchableImageWithLeftCapWidth:1.0 topCapHeight:79.0]; UIImage* buttonPressedImage =[[UIImage imageNamed:@"keyboard-button-pressed-background.png"] stretchableImageWithLeftCapWidth:1.0 topCapHeight:79.0]; UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom]; [button setTitle:title forState:UIControlStateNormal]; [button setBackgroundImage:buttonImage forState:UIControlStateNormal]; [button setBackgroundImage:buttonPressedImage forState:UIControlStateHighlighted]; button.frame = CGRectMake(xPosition, yPosition, buttonWidth, buttonHeight); 

Una vez que se presiona el button, ese button se configura como enabled = NO . El background se estira perfectamente mientras se habilita al less uno de los botones. Si todos los botones están deshabilitados, y el UITextfield renuncia a resignsFirstResponder y luego UITextField vuelve a First Responder nuevamente, los botones aparecen pero la image de background ya no parece estirarse (al less no en la dirección vertical, la horizontal parece estar bien).

No estoy realmente seguro de dónde comenzar a search la solución. Supongo que así es como el keyboard personalizado está dibujando las subvistas, pero no estoy seguro.

¿Podría solucionarse esto estableciendo la image de background en layoutSubviews , o drawRect: o algo así? El hecho de que el estiramiento horizontal funcione bien me hace preguntarme si el marco del button UIB no está bien cuando se dibuja.

EDITAR Las celdas en el extremo izquierdo son solo tags, las celdas a la derecha con numbers son UITextfields y tienen el keyboard personalizado

Cómo debe verse el keyboard: Cómo debe verse el teclado

Cómo se ve el keyboard una vez que renunció al primer respondedor en la celda 3, luego le dio 1 primer respondedor (todas las teclas están deshabilitadas), y luego le dio 4 primeros respondedores: Cómo se ve realmente el teclado una vez que el primer respondiente renunció a la celda 3, luego dio 1 primer respondedor (todas las teclas están deshabilitadas), luego le dio a 4 primeros respondedores

Para manejar diferentes API de iOS, hice una categoría para UIImage.

 @implementation UIImage (SPResizableImage) - (UIImage *)spResizableImageWithCapInsets:(UIEdgeInsets)edge { UIImage * resizableImage = nil; if ([self respondsToSelector:@selector(resizableImageWithCapInsets:)]) // iOS 5 { resizableImage = [self resizableImageWithCapInsets:edge]; } else { resizableImage = [self stretchableImageWithLeftCapWidth:edge.left topCapHeight:edge.top]; } return resizableImage; } @end 

¿Cuál es el tamaño de la image de background que está utilizando?

De todos modos stretchableImageWithLeftCapWidth:topCapHeight: está desaprobado desde iOS 5. Intenta utilizar resizableImageWithCapInsets: lugar.