【问题标题】:UIBarButtonItem Title OffsetUIBarButtonItem 标题偏移量
【发布时间】:2014-09-03 02:06:17
【问题描述】:

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

当前使用的代码:

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

我尝试添加偏移量,但它似乎没有任何作用。

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

【问题讨论】:

    标签: ios swift uikit uibarbuttonitem


    【解决方案1】:

    我遇到了类似的问题,到目前为止我发现的最佳选择是从文本创建一个 UIImage(使用白色文本颜色),然后使用该图像创建我的 UIBarButtonItem。白色被标准色调取代,它使图像垂直居中非常好。

    我在this SO question 的回答中找到了将文本转换为图像的方法。然后我使用此代码(在 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");
    

    注意:imageFromText 函数可在上面引用的 SO 答案中找到,但为了方便使用 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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多