首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于文本字符的NSMutableAttributedString创建

基于文本字符的NSMutableAttributedString创建
EN

Stack Overflow用户
提问于 2014-12-03 15:50:23
回答 2查看 2K关注 0票数 2

我的按钮有一系列标签:

代码语言:javascript
复制
whenButtonArray = ["THURSDAY\nJUNE 5", "FRIDAY\nJUNE 6", "SATURDAY\nJUNE 7", "SUNDAY\nJUNE 8"]

我想要做的是使用NSMutableAttributedString使文本在"\n“之前成为比它后面的文本更大的字体。

我将字符串初始化如下:

代码语言:javascript
复制
myMutableString = NSMutableAttributedString(string: whenWhereButtonArray[i], attributes: [NSFontAttributeName:UIFont(name: "Tungsten-Book", size: 22.0)!])

但是,如何使字符串的第二部分(在\n之后)成为较小的字体大小?我知道我可以这样做:

代码语言:javascript
复制
myMutableString.addAttribute(NSFontAttributeName, value: UIFont(name: "Tungsten-Book", size: 12.0)!, range: NSRange(location:3,length:4))

但我需要的范围是动态的,根据文本为每个按钮。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-03 16:34:30

只要您的字符串中没有Unicode字符表示/emojis,下面的代码就会工作。否则最好和NSString__s合作,就像rintaro的回答.

为了根据您的子属性的需要动态更新剩余字符串的位置和长度,您必须首先获得"\n“的位置(我使用了this答案中的公式):

代码语言:javascript
复制
let range = whenWhereButtonArray[i].rangeOfString("\n")
let newlineIndex : Int = distance(whenWhereButtonArray[i].startIndex, range.startIndex)

然后,知道"\n“的开始索引,就可以计算(1)第二个字符串的索引,然后(2)计算第二个字符串的长度。例:

代码语言:javascript
复制
let secondStringIndex : Int = newlineIndex + countElements("\n")
let lengthOfSecondString : Int = countElements(whenWhereButtonArray[i]) - secondStringIndex

然后,您可以将该信息输入子属性公式,如下所示:

代码语言:javascript
复制
myMutableString.addAttribute(NSFontAttributeName, value: UIFont(name: "Tungsten-Book", size: 12.0)!, range: NSRange(location:secondStringIndex,length:lengthOfSecondString))
票数 0
EN

Stack Overflow用户

发布于 2014-12-03 16:45:38

在这种情况下,使用NSString相对于使用Swift String相对容易

代码语言:javascript
复制
let whenButtonArray = ["THURSDAY\nJUNE 5", "FRIDAY\nJUNE 6", "SATURDAY\nJUNE 7", "SUNDAY\nJUNE 8"]

let str = whenButtonArray[0] as NSString // cast to `NSString`
let attributed = NSMutableAttributedString(string: str, attributes: [NSFontAttributeName:UIFont(name: "Arial", size: 22.0)!])
let nl = str.rangeOfString("\n")
if nl.location != NSNotFound {
    let range = NSMakeRange(NSMaxRange(nl), str.length - NSMaxRange(nl))
    attributed.addAttribute(NSFontAttributeName, value: UIFont(name: "Arial", size: 12.0)!, range: range)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27275965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档