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
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
}()