2010-09-24 13 views
8

Estoy siguiendo el segundo consejo desde here. En este consejo, dos UIBarButtonItems se agrupan en una UIToolbar. Finalmente, la UIToolbar se agrega a UINavigationBar. Ahora a mis problemas:Agregar UIToolbar con dos UIBarButtonItem a un UINavigationBar: pobre UIToolbar y qué pasa con el iPhone 4

1) Una línea blanca está en la parte superior de la barra de UIToolbar. Si aumento el tamaño de la barra de gravedad de UIT, el gradiente es incorrecto. Estoy utilizando el siguiente tamaño para la UIToolbar:

UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 90, 44.01)]; 

¿Cómo puedo deshacerme de la línea blanca? Vea aquí: alt text

El problema es que hay una línea blanca en lugar de gris. Si fuera gris, todo sería perfecto.

2) ¿Qué hay de la diferencia del tamaño de pantalla de iPhone 3 y iPhone 4? ¿Tengo que verificar qué iPhone se usa y luego doblar el tamaño?

Editar:

Los botones se crean como en el siguiente ejemplo que hice desde el sitio web mencionado anteriormente:

// create a toolbar to have two buttons in the right 
UIToolbar* tools = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 133, 44.01)]; 

// create the array to hold the buttons, which then gets added to the toolbar 
NSMutableArray* buttons = [[NSMutableArray alloc] initWithCapacity:3]; 

// create a standard "add" button 
UIBarButtonItem* bi = [[UIBarButtonItem alloc] 
initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:NULL]; 
bi.style = UIBarButtonItemStyleBordered; 
[buttons addObject:bi]; 
[bi release]; 

// create a spacer 
bi = [[UIBarButtonItem alloc] 
initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
[buttons addObject:bi]; 
[bi release]; 

// create a standard "refresh" button 
bi = [[UIBarButtonItem alloc] 
initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refresh:)]; 
bi.style = UIBarButtonItemStyleBordered; 
[buttons addObject:bi]; 
[bi release]; 

// stick the buttons in the toolbar 
[tools setItems:buttons animated:NO]; 

[buttons release]; 

// and put the toolbar in the nav bar 
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:tools]; 
[tools release]; 

@ tc .:

me trataron de una subclase UIToolbar.

// MyToolbar.h 

#import <Foundation/Foundation.h> 


@interface MyToolbar : UIToolbar { 

} 

@end 

// MyToolbar.m 

#import "MyToolbar.h" 


@implementation MyToolbar 

- (void)drawRect:(CGRect)rect { 
    // do nothing 
} 

- (id)initWithFrame:(CGRect)aRect { 
    if ((self = [super initWithFrame:aRect])) { 
     self.opaque = NO; 
     self.backgroundColor = [UIColor clearColor]; 
     self.clearsContextBeforeDrawing = YES;  
    } 
    return self; 
} 

@end 

Respuesta

5

No hay garantía de que UIToolbar dibuje sin problemas dentro de una UINavigationBar; esto podría ser responsable de la línea blanca que está viendo.

Es posible que pueda subclase UIToolbar para que no dibuje (es decir, anule -drawRect: no haga nada).

+0

Intenté subclasificar 'UIToolbar'. Ahora tengo un fondo negro para mi barra de herramientas. Qué funciones tengo que implementar para obtener el mismo degradado/estilo de 'UINavigationBar'. – testing

+2

Hmmm. Intente configurar adicionalmente 'self.opaque = NO',' self.backgroundColor = [UIColor clearColor] ', y' self.clearsContextBeforeDrawing = YES' en 'initWithFrame:' ​​o 'initWithCoder:' según corresponda. –

+0

Ahora he reemplazado 'initWithFrame:' ​​(vea mi pregunta editada). Esto parece funcionar a primera vista. Nunca subclasicé un elemento UI antes. ¿Tengo que estar consciente de algo (cosas que no funcionan o algo como esto)? – testing

0

1) No puedo explicar la línea blanca. Es curioso que solo esté encima de tus botones. ¿Cómo se crean los botones? Además, ¿hay alguna razón por la que está estableciendo la altura en 44.01, en lugar de solo 44? No estoy seguro de que la altura que establezca sea respetada en cualquier caso, pueden ser forzados a 44 (alguien me corrige si estoy equivocado).

2) No tiene que hacer nada para el iPhone 4, todo se escala automáticamente.

+0

La línea blanca está solo encima de mis botones porque puse mis botones en una barra de UITo. Luego puse esta UIToolbar en UINavigationBar. Entonces la línea blanca viene del tamaño/dibujo de mi UIToolbar. Sí, importa si 44.01 o 44. La altura de 44.01 funciona bastante bien (excepto en esta línea blanca). Si tomo 44 entonces obtengo más artefactos de dibujo. También puedo tomar 50 para la altura. Luego, la línea blanca desaparece, pero el gradiente ya no es el mismo que la barra de navegación. Consulte mi pregunta editada para obtener detalles sobre la creación de este artefacto. – testing

0

¿Usted intentó añadir esos botones no dentro de un contenedor UIView y luego añadirlo como un elemento, pero la manipulación con UIBarButtonSystemItemFlexibleSpace? Me refiero a agregar cada uno de esos botones como un elemento independiente.

+0

Sí, no usé un 'UIView' y no los agregué como elementos independientes. En su lugar, estoy creando una 'UIToolbar', creo una serie de botones, agrego los botones a la barra de herramientas y finalmente agrego la barra de herramientas a la barra de navegación. Ver mi pregunta editada para más detalles. – testing

0

Una UIToolbar está diseñada para usarse en la parte inferior de la pantalla de un iPhone, por lo que si usa otra parte, intentará crear un efecto de borde en la parte superior. Para evitar esto, la altura de la barra de herramientas debería ser 2 píxeles mayor que la altura de la barra de navegación. Bu esta vez tendrá un efecto secundario diferente que causa un borde claro en la parte inferior de la barra de navegación. (En cualquier caso, la barra de navegación ubica el elemento de la barra derecha como alineado en el centro)

Cuestiones relacionadas