UIBarButtonItem Title Offset

Estoy intentando usar un símbolo unicode en un título UIBarButtonItem, pero cambiar el tamaño de la label lo hace demasiado alto verticalmente y obviamente está descentrado.

ergh

Código actualmente en uso:

let fontDict = [NSFontAttributeName: UIFont.systemFontOfSize(30.0)] editButton.title = "✎" editButton.setTitleTextAttributes(fontDict, forState: UIControlState.Normal) 

He intentado agregar un desplazamiento, pero parece que no hace nada.

 editButton.setTitlePositionAdjustment(UIOffsetMake(0, -10.0), forBarMetrics: UIBarMetrics.Default) 

Tuve un problema similar y la mejor opción que encontré fue crear un UIImage del text (usando un color de text blanco) y luego crear mi UIBarButtonItem usando la image. El color blanco se reemplaza con el tinte estándar y centra la image verticalmente bastante bien.

Encontré el método para convertir text en una image en las respuestas a esta pregunta SO . Luego instalé el UIBarButtonItem usando este código (en 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 function imageFromText se encuentra en las respuestas de SO referencedas anteriormente, pero la imageFromText (y una function relacionada) aquí por conveniencia 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 }