Ich hatte ein ähnliches Problem, und die beste Option war ich bisher fand eine UIImage aus dem Text zu erstellen (eine weiße Textfarbe verwendet wird) und dann meine UIBarButtonItem mit dem Bild erstellen. Die weiße Farbe wird durch die Standardfarbe ersetzt und zentriert das Bild vertikal ziemlich gut.
Ich fand die Methode zum Konvertieren von Text in ein Bild in Antworten auf this SO question. Ich Setup dann die UIBarButtonItem mit diesem Code (in 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");
HINWEIS: die imageFromText
Funktion in den SO Antworten oben Bezug genommen wurde gefunden, aber ich werde es (und eine entsprechende Funktion) sind hier der Einfachheit halber mit 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
}