Pregunta

Parece que no puedo obtener una barra UISearch para posicionarse desde el extremo izquierdo hasta el extremo derecho en la barra de navegación. En el método - (void) viewDidLoad, tengo el siguiente código:

UISearchBar *sb = [[UISearchBar alloc] initWithFrame:self.tableView.tableHeaderView.frame];
sb.delegate = self;
self.navigationItem.titleView = sb;
[sb sizeToFit];
[sb release];

Cuando construyes y corres, se ve bien a primera vista. Sin embargo, si se mira más de cerca, puede ver que hay un margen / espacio a la izquierda. Esto no sería un gran problema en el gran esquema de las cosas, pero cuando toco la barra de búsqueda para iniciar una búsqueda, animo el botón de cancelar para que se vea. Debido a que la barra de búsqueda está posicionada ligeramente hacia la derecha, la animación es entrecortada y el botón de cancelación se sale del final de la siguiente manera: texto del enlace

Parece que el UINavigationItem es como una tabla con tres celdas, donde hay un relleno en la primera y la última que no puedo eliminar, ni parece haber una manera de 'fusionar' todo esto y A continuación, coloque la barra de búsqueda allí. Sé que este aspecto es posible, porque la búsqueda de la AppStore tiene una barra de búsqueda en la barra de navegación y va hasta los bordes. ¿Alguien sabe cómo hacer que la barra de búsqueda llegue hasta los bordes para que la animación de mi botón de cancelación deslizable funcione correctamente?

¿Fue útil?

Solución 3

Creo que encontré la respuesta, aunque no he probado para verificar. En el tema que proporcioné anteriormente, tengo la siguiente estructura:

controlador de la barra de pestañas - > controlador de navegación - > ver controlador (es)

La barra de búsqueda en cuestión estaba en un controlador de vista, que a su vez estaba en el controlador de navegación, cuyo controlador de navegación está en la barra de pestañas.

Casualmente estaba viendo los cursos de Stanford CS 193P (primavera de 2009) y al final de la clase 13, la respuesta pudo haber sido presentada. Alan Cannistraro declaró que la estructura de la aplicación Presence debería tener esta estructura:

esta estructura http://img143.imageshack.us/img143/6/viewcontrollerstructure .jpg

donde el controlador de vista inferior (adyacente al controlador de la barra de pestañas) fue el controlador de vista que tenía el control de la barra de búsqueda. Advirtió que si no se hace de esta manera, "se encontrará con problemas". Posiblemente el problema al que me enfrenté? Yo creo que sí.

Otros consejos

En realidad, hay una solución muy simple. Todo lo que tienes que hacer es crear una vista de ancho cero para el elemento posterior:

UIView *hackView = [[UIView alloc] initWithFrame:CGRectZero];
UIBarButtonItem *hackItem = [[UIBarButtonItem alloc] initWithCustomView:hackView];      
self.navigationItem.backBarButtonItem = hackItem;
[hackView release];
[hackItem release];

UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
[searchBar sizeToFit];
self.navigationItem.titleView = searchBar;
[searchBar release];

Asegúrese de hacer esto en su método loadView, no en init. No estoy seguro de por qué eso hace una diferencia, pero lo hace.

Aparentemente se trata de tiempo. Tenerlo en loadView dejó de funcionar para mí, pero ponerlo en viewWillAppear funciona (con una verificación para que solo se haga una vez, por supuesto). Creo que la idea es establecer la vista de título una vez que se haya completado alguna inicialización.

El siguiente código oculta la barra de navegación solo para este UIViewController:

- (void)viewWillAppear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:YES animated:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:NO animated:animated];
}

¡Para que la barra UISearch se muestre en el lugar de la barra UINavigation, en el controlador de la vista raíz solo tiene tu barra de búsqueda donde la barra de navegación estaría normalmente!

Tal vez Apple esté usando un UISearchDisplayController para hacer estas cosas.

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