2011-11-27 10 views
5

Después de crear una vista personalizada y asignarlo a la propiedad navigationItem.titleView se muestra así¿Cómo se determina el tamaño/marco de un UINavigationItem.titleView personalizado?

enter image description here

con la vista personalizada que llena el espacio entre los dos botones. Por lo tanto, la vista personalizada no está centrada en la barra de navegación. ¿Cómo determino el marco de la vista en la propiedad .titleView? Quiero centrar algunos textos en la barra de navegación, por ejemplo, debajo de la marca de tiempo.

Respuesta

14

Si usted realmente desea conseguir marco titleView 's (en su vista de nivel superior espacio de coordenadas), se puede hacer esto:

[self.navBar layoutIfNeeded]; 
CGRect titleViewFrameInTopLevelViewSpace = [self.navigationItem.titleView 
    convertRect:self.navigationItem.titleView.bounds 
    toView:self.view]; 

Es necesario hacer layoutIfNeeded si sólo ha asignado titleView, porque de forma predeterminada, la barra de navegación no representará sus subvistas hasta la próxima pasada a través del ciclo de ejecución.

Dicho esto, el titleView se centrará automáticamente, si cabe. Creo que está configurando el marco (o los límites) de su vista personalizada demasiado grande. He probado esto de dos maneras:

  • me juego hasta la titleView directamente en el XI ter. Simplemente arrastré una Vista desde la biblioteca de Objetos al centro de la barra de navegación:
    XIB screen shot
    Ajustó la vista a 128x33 automáticamente. Los controladores de cambio de tamaño me permiten ajustar el tamaño. Permanece centrado hasta que se superpone al botón Categorizar. Luego cambia a la izquierda.

  • que establezca la propiedad titleView en viewDidLoad:

    - (void)viewDidLoad 
    { 
        [super viewDidLoad]; 
        UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 33)]; 
        customView.backgroundColor = [UIColor greenColor]; 
        self.navItem.titleView = customView; 
    } 
    

    El resultado es el siguiente:
    Simulator screen shot

+0

Gracias Rob. Esto es lo que causaba que la vista no se centrara. – ChrisP

2

Usted podría conseguir el ancho de la leftBarButtonItem y la rightBarButtonItem después de que los haya establecido y, a continuación, utilizar eso para determinar la forma de centro dentro de la vista que proporciona a titleView. Eso podría hacer lo que quieras?

Cuestiones relacionadas