Pregunta

Tengo una barra de navegación en una aplicación para el iPhone con un UIBarButtonItems personalizados en él:

UIBarButtonItem* homePersonButton = [[UIBarButtonItem alloc]
       initWithImage:[UIImage imageNamed:@"homePerson.png"]
               style:UIBarButtonItemStylePlain
              target:self action:@selector(showHomePerson)];

El homePerson.png es 20 x 18.

Se ve bien en modo vertical, pero en modo horizontal la imagen 20x18 en el botón es demasiado alto para verte bien. Parece que iOS hace algún trabajo en sus botones estándar para reducir el tamaño de la imagen según sea necesario cuando se encuentra en un diluyente de la barra de navegación.

¿Cuál es la mejor manera de manejar esto?

Otro ejemplo es cuando tengo un botón personalizado en el titleview de la barra de navegación. Necesito que se encoja y cuando gira el app.

Gracias de antemano por cualquier punteros que me puede dar!

¿Fue útil?

Solución

El tamaño de la imagen barra de una barra de herramientas de navegación y de 20 x 20 así que cuando usted está proporcionando una imagen que no cumpla con esas dimensiones que está dejando hasta el marco para cambiar el tamaño / escala de la imagen que está causando el problema. Redimensionar / escalar la imagen a 20x20 y su imagen debe ser correcta, tanto en vertical como en horizontal.

Otros consejos

steipete mencionó esto en los comentarios, pero me siento como que tiene que ser una respuesta ahora. A partir de iOS 5, se puede utilizar el UIBarButtonItem inicializador :

- initWithImage:landscapeImagePhone:style:target:action:

Sólo conjunto de imágenes landscapeImagePhone a una versión más pequeña de la imagen que desea cambiar de tamaño en el paisaje.

Después de algunas pruebas, me di cuenta de que el iPhone hace encoger la barra de navegación y por tanto las UIBarButtonItems en la barra de navegación, pero el iPhone 6 Plus no . El 6 Plus parece mantener la barra de navegación a una altura de 44px, mientras que el iPhone normal se contrae hacia abajo a 32px. Debido a esto, el 6 Plus también no utilizar el landscapeImagePhone en el paisaje.

Probé esto no una imagen de tamaño más pequeño apenas usar para landscapeImagePhone, sino una imagen completamente diferente. La imagen no cambió en el 6 Plus.


No obstante, tenga en cuenta lo siguiente a partir de iOS 9.2 en el iPhone 6 Plus:

La documentación de Apple para los estados de inicializador este que landscapeImagePhone es:

  

La imagen que se utilizará para el artículo en bares de paisaje en el idioma UIUserInterfaceIdiomPhone.

A partir de iOS 9.2, el informe Plus hace 6 como UIUserInterfaceIdiomPhone tanto en vertical como en horizontal. Antes, el 6 Plus solía ser UIUserInterfaceIdiomUnspecified. No estoy muy seguro de que cuando que se ha actualizado. Pero, puesto que ahora es UIUserInterfaceIdiomPhone, de acuerdo con la documentación, el landscapeImagePhone debe extenderse a la 6 Plus también.

Así que tal vez no se basa tanto en la UIUserInterfaceIdiom tanto como lo hace en la altura de la barra de navegación. No lo sé con certeza. nota solo que esta inconsistencia puede ser "fijo" en el futuro y por lo tanto causa un comportamiento diferente.

Tengo problema similar. Ahora uso el tipo personalizado al botón. p.ej. aquí está mi catálogo de UIBarButtonItem. se puede usar para construir un botón de la barra personalizada.

+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image highlightedImage:(UIImage *)highlightedImage     target:(id)target action:(SEL)action{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setBackgroundImage: [image stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateNormal];
    button.frame= CGRectMake(0.0, 0.0, image.size.width, image.size.height);
    [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:button];

    return barItem;
}

A continuación, se puede ajustar el botón de la barra vista personalizada marco cuando rote.

tip:

  1. en el método de rotación, por ejemplo, willAnimateRotationToInterfaceOrientation, imprimir la vista personalizada enmarcar de los elementos de los botones barra de navegación .., y obtener la correcta marco (en modo protrait) que desee, también, se puede ver el cuadro es incorrecto en el modo horizontal, tenemos que solucionarlo.
  2. solucionar el problema del marco botón de la barra paisaje haciendo referencia al valor de trama correcto.

en mi caso, puedo solucionar simplemente sencilla el origen de la vista personalizada ... por ejemplo.

// adjust the navigation Item top, otherwise it is not proper set after rotation
_centralRootViewController.navigationItem.leftBarButtonItem.customView.top = 5;
_centralRootViewController.navigationItem.rightBarButtonItem.customView.top = 5;

Nota:. La parte superior es la ordenada del marco

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top