2012-05-23 21 views
10

Tengo un titleView personalizado que necesito para establecer el ancho máximo para. Ese sería el ancho de la pantalla - ancho del elemento izquierdo (título de la parte posterior, botón o nulo) - ancho del elemento derecho (botón o nulo). ¿Cómo puedo determinar esto?Obtener el ancho máximo de uinavigationItem.titleView?

Gracias.

Respuesta

4

¿La barra de navegación no establece el ancho al máximo automáticamente? Es decir, estoy seguro de que se llama el método sizeThatFits: de tu titleView personalizado. Tal vez este es un buen punto de partida.

+0

No establece el ancho automáticamente. Puedo llamar a sizeToFit, que llama a sizeThatFits después de configurarlo, pero no sé qué devolver desde sizeThatFits. ¿De dónde obtengo el ancho máximo? – Stephanie

+0

No lo he probado yo mismo, pero dado que las vistas de título se cambian de tamaño para encajar y centrarme entre los elementos de navegación izquierdo y derecho, espero que la barra de navegación envíe el mensaje sizeThatFits al titleView. ¿No es el caso? –

+0

No lo creo, pero no estoy seguro. Pero de cualquier forma, ¿qué regreso de sizeThatFits? – Stephanie

6
_segmentedControl.frame = CGRectMake(0, 0, CGFLOAT_MAX, _segmentedControl.frame.size.height); 

[self.navigationItem setTitleView:_segmentedControl]; 

Configuración CGFLOAT_MAX como la anchura de la vista del título navigationItem utilizar al máximo el espacio disponible entre el elemento de la izquierda y el artículo correcto.

+0

Esto debe marcarse como la respuesta correcta. – Peymankh

+0

Esto funcionó para mí en iOS <11 (la vista se dimensionó automáticamente en iOS 11) –

0

Establecer titleView ancho a más ancho de lo necesario para el ancho máximo de pantalla y la barra de navegación cambia el ancho del ancho para adaptarse a la pantalla. Si hay uIBarButtonItem hacia la izquierda o hacia la derecha, entonces TitleView cambia el tamaño relativo a ellos. Intente girar la pantalla y compruébelo usted mismo.

func setTitleView(){ 
    guard let navFrame = navigationController?.navigationBar.frame else{ 
     return 
    } 
    let myView = UIView(frame: CGRect(x: 0, y: 0, width: navFrame.width*3, height: navFrame.height)) 
    myView.backgroundColor = UIColor.orange 
    self.navigationItem.titleView = myView 
} 
Cuestiones relacionadas