ho avuto un problema simile, e l'opzione migliore che ho trovato finora è stato quello di creare un UIImage dal testo (utilizzando un colore del testo bianco) e quindi creare la mia UIBarButtonItem utilizzando l'immagine. Il colore bianco viene sostituito con la tinta standard e centra l'immagine verticalmente piuttosto bene.
Ho trovato il metodo per convertire il testo in un'immagine in risposte a this SO question. Ho poi impostare l'UIBarButtonItem utilizzando questo codice (a Swift):
let settingsImage = imageFromText("\u{2699}", font: UIFont(name: "Helvetica", size: 34.0)!, maxWidth: 1000, color:UIColor.whiteColor());
let settingsButton = UIBarButtonItem(image: settingsImage, style: UIBarButtonItemStyle.Plain, target: self, action: "showSettings");
NOTA: la funzione imageFromText
si trova nei SO risposte fa riferimento sopra, ma io includerlo (e una funzione correlata) qui per comodità usando swift:
class func sizeOfAttributeString(str: NSAttributedString, maxWidth: CGFloat) -> CGSize {
let size = str.boundingRectWithSize(CGSizeMake(maxWidth, 1000), options:(NSStringDrawingOptions.UsesLineFragmentOrigin), context:nil).size
return size
}
class func imageFromText(text:NSString, font:UIFont, maxWidth:CGFloat, color:UIColor) -> UIImage
{
let paragraph = NSMutableParagraphStyle()
paragraph.lineBreakMode = NSLineBreakMode.ByWordWrapping
paragraph.alignment = .Center // potentially this can be an input param too, but i guess in most use cases we want center align
let attributedString = NSAttributedString(string: text, attributes: [NSFontAttributeName: font, NSForegroundColorAttributeName: color, NSParagraphStyleAttributeName:paragraph])
let size = sizeOfAttributeString(attributedString, maxWidth: maxWidth)
UIGraphicsBeginImageContextWithOptions(size, false , 0.0)
attributedString.drawInRect(CGRectMake(0, 0, size.width, size.height))
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}