Swift:在 UIbutton 中将 fontawesome 图标与字符串混合

Posted

技术标签:

【中文标题】Swift:在 UIbutton 中将 fontawesome 图标与字符串混合【英文标题】:Swift: Mix fontawesome icon with string in UIbutton 【发布时间】:2019-08-20 08:10:27 【问题描述】:

我在 Swift 5 中使用 FontAwesome.swift 为我的 UI 按钮添加了一个 fontawesome 图标。我想将 fontawesome 图标与字符串 "Database" 混合。这是我尝试过的:

self.titleLabel?.font = UIFont.fontAwesome(ofSize: 15, style: .solid)
self.setTitle(String.fontAwesomeIcon(name: .database) + " Database", for: UIControl.State.normal)

但是,结果给了我两个相同的图标:

我想要的是这样的:

【问题讨论】:

在这个 pod 的 Github repo 中没有关于你正在尝试什么的例子,但是你可以使用 Attributed String 和 NSTextAttachment 来做到这一点,请检查这个答案 ***.com/questions/50040115/… 【参考方案1】:

你可以这样做:

let str = String.fontAwesomeIcon(name: .database) + " Database"
let attributedStr = NSMutableAttributedString(string: str)

//Apply FontAwesome to the first character
let range1 = NSRange(location: 0, length: 1)
attributedStr.addAttribute(.font,
                           value: UIFont.fontAwesome(ofSize: 15, style: .solid),
                           range: range1)

//Apply the system font to the rest of the string
let range2 = NSRange(location: 1, length: (str as NSString).length - 1)
attributedStr.addAttribute(.font,
                           value: UIFont.systemFont(ofSize: 15),
                           range: range2)

//Set the attributed text for the button
self.setAttributedTitle(attributedStr, for: .normal)  //self being the button *itself*

结果如下:

【讨论】:

谢谢!我无法理解 NSMutableAttributedString。我猜它来自objective-c? @BanghuaZhao 正确,它只是一个可变属性字符串。【参考方案2】:

库搜索源字符串中的子字符串并替换相应的图标。其中一个词是“数据库”。可以毫无问题地放置另一个文本。 这样的感觉,就是缺少针对这种情况的筛选功能。

【讨论】:

以上是关于Swift:在 UIbutton 中将 fontawesome 图标与字符串混合的主要内容,如果未能解决你的问题,请参考以下文章

Swift:在 UIbutton 中将 fontawesome 图标与字符串混合

在Swift中将UIButton从屏幕右侧定位20px

swift 在代码中将生成的imageView变成UIButton

如何在 Swift 3 中将 UIButton 添加到我的 UITableViewCell 中?

SDWebImage 使用 Swift 在 CellView 中将图像设置为 UIButton

如何在 Swift 中将触摸事件发送到 nextResponder