UISearchBarController iOS 11 problema – Los botones SearchBar y de scope se superponen

Referido aquí y aquí . No hay respuesta en el primer enlace. En el segundo enlace, aunque no se acepta la respuesta, pero el enlace al foro de desarrolladores de apple da error.

Antes de iOS 11:

introduzca la descripción de la imagen aquí

iOS 11:

introduzca la descripción de la imagen aquí

Nota : el mismo código del mismo dispositivo.
Además, ¿esto significaría que todas las aplicaciones que usan esta function deben volver a publicarse?

En el radar que Ray Wenderlich presentó, @benck publicó esta respuesta de WWDC, que, si no me equivoco, aún no se ha publicado.

Encontré el mismo problema en mi aplicación, mi solución está en iOS 11, usando Apple sugirió una nueva forma de searchBar que está en navigationItem, de lo contrario, usando la antigua forma. Mi código en viewDidLoad () como a continuación:

if #available(iOS 11.0, *) { navigationController?.navigationBar.prefersLargeTitles = false navigationItem.searchController = searchController navigationItem.hidesSearchBarWhenScrolling = false searchViewHeight.constant = 0 } else { searchView.addSubview(searchController.searchBar) } 

Tengo dos IBOutlets: searchView y searchViewHeight:

 @IBOutlet var searchView: UIView! @IBOutlet var searchViewHeight: NSLayoutConstraint! // new added for iOS 11 

Antes de iOS 11, la jerarquía de my viewController como se muestra a continuación:

Mi búsquedaVer antes iOS 11

Tengo un searchView cuya altura es 44 para que contenga la vista searchBar de my searchController. Está debajo de la barra de navigation.

En iOS 11, agrego un nuevo IBOutlet para la restricción de altura de searchView y establezco su constante en 0, oculta esta vista de contenedor. Y añada searchController como parte del elemento de navigation.

Consulte el documento de Apple: https://developer.apple.com/documentation/uikit/uinavigationitem/2897305-searchcontroller

Una cosa más está en iOS 11, el color de background textBield de la barra de búsqueda es poco más oscuro que el color de la barra de navigation por defecto. Para la coinheritance, puede cambiarlo usando el siguiente código:

 // For iOS 11 navigationItem's searchBar adapter if let textField = searchController.searchBar.value(forKey: "searchField") as? UITextField { if let backgroundView = textField.subviews.first { // Search bar textField background color backgroundView.backgroundColor = UIColor.white // Search bar textField rounded corner backgroundView.layer.cornerRadius = 10 backgroundView.clipsToBounds = true } } 

Según sus comentarios, el UISearchController de su UISearchBar ha sido asignado a la UITableView de su tableHeaderView . En iOS 11, deberías asignar tu UISearchController a la propiedad UISearchController del elemento de navigationItem de tu vista. Ya no necesita asignar UISearchBar ninguna parte. Consulte la documentation de Apple sobre esta nueva propiedad.