2014-11-18 14 views
15

Wenn ich ein Suchfeld Hintergrundbild auf eine UIImage, die Polsterung zwischen der Lupe und Platzhaltertext in der Suchleiste, wenn ausgewählt, ändert.Einstellung UISearchBar Suchfeld Hintergrundbild ändert die Polsterung

Mit dem Standard-Hintergrund:

Good padding

Mit einem benutzerdefinierten Hintergrund:

Bad padding

Diese Änderung durch diese beiden Linien verursacht:

UIImage *colorImage = [UIImage imageWithColor:[UIColor grayColor] size:CGSizeMake(28, 28)]; 
[self setSearchFieldBackgroundImage:[colorImage imageWithRoundedCorners:5] forState:UIControlStateNormal]; 

imageWithRoundedCorners: ist eine Kategoriemethode, die das Bild einfach auf einen CALayer mit einem Eckenradius zeichnet und dann aus dem Grafikkontext einen UIImage erstellt.

Warum ist das und wie kann ich das vermeiden? Ich habe versucht, ein Bild in der Größe zu übertragen, das zwar skalierbar ist, aber das hatte keine Auswirkungen.

Antwort

24

Es ist seltsam, dass es zurückgesetzt wird, aber Sie können so etwas verwenden, um es nach dem Einstellen des Hintergrundbildes zu Ihren wünschen. searchTextPositionAdjustment ist eine Eigenschaft auf UISearchBar und funktioniert perfekt. 8.0 scheint der Standard zu sein, aber Sie könnten es einstellen, was auch immer Sie mögen.

[self.searchBar setSearchFieldBackgroundImage:[self imageWithColor:[UIColor grayColor] andSize:CGSizeMake(28.0, 28.0)] forState:UIControlStateNormal]; 
[self.searchBar setSearchTextPositionAdjustment:UIOffsetMake(8.0, 0.0)]; 

enter image description here

+0

Jeeze, so einfach! Vielen Dank! – pr1001

+0

Es ist so schön, wenn es richtig ist! Glückliche Kodierung. –

+1

Vielleicht möchten Sie auch ein Radar archivieren, weil ich sagen würde, dass das Zurücksetzen für Hintergrundbilder ein Fehler ist. Irgendwie –

5

Für alle, die jetzt Swift verwenden, können Sie den folgenden Code verwenden können (funktioniert in Swift 2)

let searchBarBackground = UIImage.roundedImage(UIImage.imageWithColor(UIColor.whiteColor(), size: CGSize(width: 28, height: 28)),cornerRadius: 2) 
searchBar.setSearchFieldBackgroundImage(searchBarBackground, forState: .Normal) 
searchBar.searchTextPositionAdjustment = UIOffsetMake(8.0, 0.0) 

Verwendung dieser mit einer Erweiterung zu UIImage:

extension UIImage { 
    class func imageWithColor(color: UIColor, size: CGSize) -> UIImage { 
     let rect: CGRect = CGRectMake(0, 0, size.width, size.height) 
     UIGraphicsBeginImageContextWithOptions(size, false, 0) 
     color.setFill() 
     UIRectFill(rect) 
     let image: UIImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return image 
    } 
    class func roundedImage(image: UIImage, cornerRadius: Int) -> UIImage { 
     let rect = CGRect(origin:CGPoint(x: 0, y: 0), size: image.size) 
     UIGraphicsBeginImageContextWithOptions(image.size, false, 1) 
     UIBezierPath(
      roundedRect: rect, 
      cornerRadius: CGFloat(cornerRadius) 
     ).addClip() 
     image.drawInRect(rect) 
     return UIGraphicsGetImageFromCurrentImageContext() 
    } 
} 

Geben Sie etwas wie folgt an:

enter image description here

Verwandte Themen