titulo tablas tabla repite repetir funciona filas fila encabezados encabezado como ios swift uisearchbar ios9 uisearchcontroller

ios - tablas - repetir filas de titulo en word no funciona



La barra de búsqueda de iOS 9 desaparece de la vista del encabezado de la tabla cuando UISearchController está activo (13)

La estructura:

View1 (haga clic en un botón) -> present modally (MyModalView: UITableViewController)

MyModalView tiene UISearchController integrado. La barra de búsqueda de UISearchController se coloca en MyModalView.tableView.tableHeaderView.

Ha estado funcionando bien desde iOS 8.0. Sin embargo, en iOS 9, la barra de búsqueda desaparece cuando el UISearchController está activo. Por favor, eche un vistazo a estas fotos a continuación

La vista modal:

UISearchController activo en iOS 8:

UISearchController activo en iOS 9:

El código muy estándar:

override func viewDidLoad() { super.viewDidLoad() // Dynamically create a search controller using anonymous function self.resultSearchController = ({ let controller = UISearchController(searchResultsController: nil) controller.searchResultsUpdater = self controller.dimsBackgroundDuringPresentation = false controller.searchBar.sizeToFit() controller.searchBar.delegate = self self.tableView.tableHeaderView = controller.searchBar return controller })() // Auto sizing row & cell height self.tableView.estimatedRowHeight = 130 self.tableView.rowHeight = UITableViewAutomaticDimension self.definesPresentationContext = true // No footer for better presentation self.tableView.tableFooterView = UIView.init(frame: CGRectZero) }

Este problema también ocurre en iOS 9.1 beta ...

Cualquier idea / puntero sería muy apreciada

Salud.


Descubrí que son las métricas simuladas (barra superior) en el guión gráfico lo que causa este problema. En mi caso, las siguientes líneas funcionan, pero todavía no sé por qué.

- (void)willPresentSearchController:(UISearchController *)searchController { // do something before the search controller is presented self.navigationController.navigationBar.translucent = YES; } -(void)willDismissSearchController:(UISearchController *)searchController { self.navigationController.navigationBar.translucent = NO; }


Establecer la barra de navegación permanentemente como translúcida en el guión gráfico resolvió mi problema.


Funciona

override func viewDidLoad() { super.viewDidLoad() self.extendedLayoutIncludesOpaqueBars = !self.navigationController!.navigationBar.translucent }


Gracias @wiles duan y @Techprimate

En mi caso, solucioné este problema estableciendo:

self.definesPresentationContext = NO;

E implemente los siguientes 2 métodos en UISearchControllerDelegate

- (void)willPresentSearchController:(UISearchController *)searchController { // do something before the search controller is presented self.navigationController.navigationBar.translucent = YES; } -(void)willDismissSearchController:(UISearchController *)searchController { self.navigationController.navigationBar.translucent = NO; }


Lo arreglé en mi caso quitando

definesPresentationContext = true

¡Todavía no probé si hay alguna desventaja de eliminar esto!


Ninguno de ellos funcionó para mí, lo arreglé usando este truco

func position(for bar: UIBarPositioning) -> UIBarPosition { if UIDevice.current.userInterfaceIdiom == .pad { return .top } else { if iOSVersion <= 9 { return .top } return .topAttached } }


No estoy seguro de cuál es exactamente el problema, pero lo "solucioné":

self.searchController.hidesNavigationBarDuringPresentation = NO; self.definesPresentationContext = NO;

Mi conjetura es que UISearchController está haciendo algo UISearchController cuando intenta presentar como una barra de navegación. Entonces, este es un truco, pero al menos no bloquea al usuario. La barra de búsqueda no hace la animación genial y cubre la barra de navegación.


No tengo una barra de navegación en este lugar de una aplicación. Ninguna de las otras publicaciones SO me ayudó, así que lo arreglé de esta manera:

- (void)layoutSubviews { [[[self searchController] searchBar] sizeToFit]; }


Parece que todos tenemos el mismo problema, pero se resolvieron de diferentes maneras. Sin embargo, ninguna de las respuestas sugeridas funcionó para mí :(. Sin embargo, gracias a todos por su tiempo.

Obtuve una solución que resolvió mi problema. Está configurando Extender bordes: bajo Barras opacas de mi (MyModalView: UITableViewController) en verdadero en el Storyboard usando Interface Builder.

En resumen:

MyModalView: UITableViewController, en Storyboard usando Interface Builder tiene

Extender bordes: - Debajo de las barras superiores marcadas - Debajo de las barras inferiores marcadas - Debajo de las barras opacas marcadas


Si desea ocultar su barra de navegación y presentar el controlador de búsqueda en pantalla completa, configure lo siguiente en su barra de navegación y la barra de búsqueda no desaparecerá:

navigationController?.navigationBar.translucent = true


Tuve el mismo problema, y ​​cuando depuré la interfaz de usuario en Xcode descubrí que la vista UISearchBar se movió a otra vista y el ancho se puso a cero.

Lo arreglé estableciendo la propiedad definesPresentationContext del UISearchController en false y configurándolo true para el UITableViewController que lo contiene.

viewDidLoad() solo una línea a su viewDidLoad() .

override func viewDidLoad() { super.viewDidLoad() // Dynamically create a search controller using anonymous function self.resultSearchController = ({ let controller = UISearchController(searchResultsController: nil) controller.searchResultsUpdater = self controller.dimsBackgroundDuringPresentation = false controller.definesPresentationContext = false // Disable the presentation controller controller.searchBar.sizeToFit() controller.searchBar.delegate = self self.tableView.tableHeaderView = controller.searchBar return controller })() // Auto sizing row & cell height self.tableView.estimatedRowHeight = 130 self.tableView.rowHeight = UITableViewAutomaticDimension self.definesPresentationContext = true // This one remains the same // No footer for better presentation self.tableView.tableFooterView = UIView.init(frame: CGRectZero) }


Tuve que

self.aNavigationController?.extendedLayoutIncludesOpaqueBars = true

Encontré una pregunta similar here pero en mi caso no estaba en el método viewDidLoad. Tuve que probar diferentes puntos de vista hasta que funcionó. Ahora puedo tener un color de barra de navegación personalizado y la barra de búsqueda,


sc.hidesNavigationBarDuringPresentation = false

hace el truco para mi

lazy var searchController:UISearchController = { let sc = UISearchController(searchResultsController: nil) sc.searchResultsUpdater = self sc.obscuresBackgroundDuringPresentation = false sc.searchBar.placeholder = "Search" sc.hidesNavigationBarDuringPresentation = false return sc }()