2014-11-18 24 views
15

Quando si imposta un'immagine di sfondo del campo di ricerca su un UIImage, il padding tra la lente di ingrandimento e il testo segnaposto nella barra di ricerca quando le modifiche selezionate.Impostazione dell'immagine di sfondo del campo di ricerca di UISearchBar cambia il padding

Con lo sfondo di default:

Good padding

Con uno sfondo personalizzato:

Bad padding

Questo cambiamento è causato da queste due righe:

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

imageWithRoundedCorners: è un metodo di categoria che disegna semplicemente l'immagine su un CALayer con un raggio dell'angolo e quindi crea un UIImage dal contesto grafico.

Perché questo e come posso evitare questo? Ho provato a passare un'immagine esplicitamente ridimensionabile, ma ciò non ha avuto alcun effetto.

risposta

24

È strano che lo si reimposta, tuttavia è possibile utilizzare qualcosa di simile per impostarlo a proprio piacimento dopo aver impostato l'immagine di sfondo. searchTextPositionAdjustment è una proprietà su UISearchBar e funziona perfettamente. 8.0 sembra essere l'impostazione predefinita, ma è possibile impostarlo in base alle proprie esigenze.

[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, così facile! Grazie! – pr1001

+0

È così bello quando è giusto! Felice codifica. –

+1

Si potrebbe anche voler archiviare un radar, perché direi che il ripristino delle immagini di sfondo è un tipo di errore –

5

Per tutti quelli che ora utilizzando Swift, è possibile utilizzare il seguente codice (lavora a 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) 

Utilizzare questo con una proroga per 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() 
    } 
} 

Per dare qualcosa simile a questo:

enter image description here