ios ios7 uikit transition searchbar

iOS7, backgroundImage para UISearchBar



uikit transition (4)

Estoy haciendo la transición de la interfaz de usuario entre iOS 6 y iOS 7.

Tenemos una barra UISearchBar relacionada con un UISearchDisplayController, he establecido la imagen de fondo de la barra de navegación y la barra de búsqueda en una imagen 1x1 creada dinámicamente con un color.

self.searchDisplayController.searchBar.translucent = NO; self.searchDisplayController.searchBar.barTintColor = [UIColor clearColor]; self.searchDisplayController.searchBar.tintColor = [UIColor myTintColor]; self.searchDisplayController.searchBar.backgroundImage = [self imageWithColor:[UIColor myBGColor]]; self.searchDisplayController.searchBar.scopeBarBackgroundImage = [self imageWithColor:[UIColor myBGColor]];

En iOS6, todo funciona como se espera. En iOS7, cuando se selecciona searchBar, el scopeBar aparece con una buena backgroundImage (configurada con searchBar.scopeBarBackgroundImage) pero searchBar es un tipo de gris translúcido. Cuando presiono Cancelar, la imagen de fondo searchBar está de vuelta.

////////////////////////////////////////////////// ////////////////////////////////////////////////// /

PREGUNTA EDITADA

////////////////////////////////////////////////// ////////////////////////////////////////////////// /

En realidad, utilicé barTintColor y otras opciones aquí y allá, pero no funciona. Ese es el resultado con el barTintColor establecido con el mismo color. Pero hay esta capa blanca en la parte superior.


En iOS 7, las propiedades backgroundImage y scopeBarBackgroundImage ya no funcionan como se esperaba y se vuelven translúcidas.

El siguiente método se ha introducido en iOS 7 que aborda este problema. (Docs here )

setBackgroundImage:forBarPosition:barMetrics:

Esto es lo que debes hacer:

[self.searchDisplayController.searchBar setBackgroundImage:[self imageWithColor:[UIColor yourColor]] forBarPosition:0 barMetrics:UIBarMetricsDefault];

Aquí, barPosition : 0 es UIBarPositionAny .

Editar:

Código SWIFT:

self.searchDisplayController.searchBar.setBackgroundImage(self.image(color: UIColor.yourColor), for: UIBarPosition(rawValue: 0)!, barMetrics:.default)


Pude replicar lo que estabas tratando de hacer y parece que me funciona si configuro barTintColor a mi elección de color.

Yo sugeriría intentarlo:

self.searchDisplayController.searchBar.barTintColor = [UIColor myBGColor];

Hice [UIColor redColor] y obtuve los resultados que esperaba.


Si configura la propiedad barTintColor de su barra de búsqueda, obtendrá lo que espera. Acabo de intentar esto y funciona:

self.searchDisplayController.searchBar.barTintColor = [UIColor yellowColor];

Tenga en cuenta que la propiedad barTintColor se introdujo en iOS 7.


Ya que no hay una versión actual de Swift, dejaré esto aquí para uso futuro, ya que también he estado luchando con él durante bastante tiempo.

  1. Obtén una imagen de 1px con el color deseado (incluso claro)

  2. configurarlo como backgroundImage usando:

    searchController.searchBar.setBackgroundImage(UIImage(named: "red"), for: .any, barMetrics: .default)