UIBarButtonItem标题偏移量

Til*_*son 8 uikit uibarbuttonitem ios swift

我正在尝试在UIBarButtonItem标题中使用unicode符号,但是更改标签大小会使其在垂直方向上过高,并且显然偏离中心.

ergh

目前正在使用的代码:

let fontDict = [NSFontAttributeName: UIFont.systemFontOfSize(30.0)]
editButton.title = "?"
editButton.setTitleTextAttributes(fontDict, forState: UIControlState.Normal)
Run Code Online (Sandbox Code Playgroud)

我试过添加一个偏移量,但它似乎没有做任何事情.

editButton.setTitlePositionAdjustment(UIOffsetMake(0, -10.0), forBarMetrics: UIBarMetrics.Default)
Run Code Online (Sandbox Code Playgroud)

FTL*_*Guy 8

我有一个类似的问题,我到目前为止找到的最佳选择是从文本创建UIImage(使用白色文本颜色),然后使用图像创建我的UIBarButtonItem.白色替换为标准色调,并使图像垂直居中.

我找到了将文本转换为图像的方法,以回答这个问题.然后我使用此代码(在Swift中)设置UIBarButtonItem:

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");
Run Code Online (Sandbox Code Playgroud)

注意:该imageFromText函数可在上面引用的SO答案中找到,但为了方便起见,我将在此处包含它(和相关函数):

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
}
Run Code Online (Sandbox Code Playgroud)