2014-09-03 23 views
7

Próbuję użyć symbolu Unicode w tytule UIBarButtonItem, ale zmiana rozmiaru etykiety powoduje, że jest on zbyt wysoki w pionie i jest oczywiście poza centrum.UibarButtonItem Przesunięcie tytułu

ergh

Code obecnie używane:

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

Próbowałem dodając offset, ale nie wydaje się do niczego.

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

Odpowiedz

8

Miałem podobny problem, a najlepszym rozwiązaniem znalazłem do tej pory było stworzenie UIImage z tekstu (za pomocą białego koloru tekstu), a następnie utworzyć mój UIBarButtonItem pomocą obrazu. Biały kolor zastępowany jest standardowym odcieniem i bardzo dobrze wyśrodkowuje obraz w pionie.

Znalazłem metodę przekształcania tekstu na obraz w odpowiedzi na this SO question. I wtedy skonfigurować UIBarButtonItem przy użyciu tego kodu (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"); 

UWAGA: funkcja imageFromText znajduje się w tzw odpowiedzi wymienionych powyżej, ale będę to go (i powiązanych funkcji) tutaj dla wygody przy użyciu szybki:

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 
}