UILabel富文本

在别的地方看到的,用swift重写了一下。仅仅是为了练手,方便以后查看(好吧,方便以后复制粘贴)😄
这里只给出了几个样例,其它的根据文档类推了;相关key的位置NSAttributedString.h

    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.view.backgroundColor = UIColor.white
        self.title = "Bear"
        
        testLabel = UILabel.init(frame: CGRect.init(x: 10, y: 100, width: self.view.bounds.width-20, height: self.view.bounds.height-200))

        
        let text:String = "途牛旅游网于2006年10月创立于南京,以“让旅游更简单”为使命,为消费者提供由北京、天津、上海、广州、深圳、南京等64个城市出发的旅游产品预订服务,产品全面,价格透明,全年365天24小时400电话预订,并提供丰富的后续服务和保障。\n      途牛旅游网提供8万余种旅游产品供消费者选择,涵盖跟团、自助、自驾、邮轮、酒店、签证、景区门票以及公司旅游等,已成功服务累计超过400万人次出游。2014年12月15日,途牛旅游网宣布与弘毅投资、京东商城、携程旗下子公司“携程投资”以及途牛首席执行官与首席运营官签订股权认购协议。根据协议途牛将向上述投资者出售1.48亿美元的新发行股份。[1]\n       2015年11月24日,途牛旅游网与海航旅游集团共同宣布战略结盟。海航旅游战略投资途牛5亿美元,双方将利用各自优质资源,在线上旅游、航空、酒店服务等领域开展深度合作。[2]易观报告显示,2015年第3季度,途牛交易规模达到46.5亿元人民币,同比增长141.1%。这已是途牛连续三个季度同比增速超过三位数:2015年第二季度时,途牛交易规模同比增长135.3%;第一季度,这一数据为122.8%。\n        从增速来看,途牛再度蝉联行业第一。[3]以全年业绩来看,途牛2015年的净收入为76亿元人民币(合11.802亿美元),较2014年增长116.3%。收入增长主要来自于跟团游、自助游及其他收入的增长。2015年总出游人次为4449053,较2014年的2181834人次增长103.9%。[4]adfasdfadf"
        
        let stringLen = text.characters.count
        
        let attrString = NSMutableAttributedString(string: text)
        
        //设置字体
        let attrFont = UIFont.systemFont(ofSize: 13.0)
        attrString.addAttribute(NSFontAttributeName, value: attrFont, range: NSRange(location: 0, length: stringLen))
        
        //设置倾斜,需要导入coreText
        //FIXME: 字母,数据,符号出现倾斜,而汉字没有影响
        let italicFont = self.GetVariationOfFontWithTrait(baseFont: attrFont, trait: .traitItalic)
        attrString.addAttribute(NSFontAttributeName, value: italicFont, range: NSRange(location: 0, length: stringLen))
        
        // 设置颜色:字体颜色,背景颜色
        attrString.addAttribute(NSForegroundColorAttributeName, value:UIColor.red, range:NSString(string:text).range(of: "途牛"))
        attrString.addAttribute(NSBackgroundColorAttributeName, value:UIColor.blue, range:NSString(string:text).range(of: "南京"))

        //段落样式
        let style:NSMutableParagraphStyle = NSParagraphStyle.default.mutableCopy() as! NSMutableParagraphStyle
        style.lineSpacing = 10;//增加行高
        style.headIndent = 10;//头部缩进,相当于左padding
        style.tailIndent = -10;//相当于右padding
        style.lineHeightMultiple = 1.5;//行间距是多少倍
        style.alignment = .left;//对齐方式
        style.firstLineHeadIndent = 20;//首行头缩进
        style.paragraphSpacing = 10;//段落后面的间距
        style.paragraphSpacingBefore = 20;//段落之前的间距
        attrString.addAttribute(NSParagraphStyleAttributeName, value:style, range:NSMakeRange(0, stringLen))
        
        testLabel.attributedText = attrString
        testLabel.numberOfLines = 0
        self.view.addSubview(testLabel)
        
        
    }


    //获取斜体
    func GetVariationOfFontWithTrait(baseFont:UIFont, trait:CTFontSymbolicTraits)->UIFont {
        let fontSize:CGFloat  = baseFont.pointSize
        let baseFontName:CFString = baseFont.fontName as CFString
        let baseCTFont:CTFont = CTFontCreateWithName(baseFontName, fontSize, nil)
        let ctFont:CTFont = CTFontCreateCopyWithSymbolicTraits(baseCTFont, 0, nil, trait, trait)!
        let variantFontName:NSString = CTFontCopyName(ctFont, kCTFontPostScriptNameKey)!
        let variantFont:UIFont = UIFont.init(name:variantFontName as String, size: fontSize)!
        return variantFont;
    };
   

NSString+RichTextCategory

/**
 *  计算富文本字体高度
 *
 *  @param lineSpeace 行高
 *  @param font       字体
 *  @param width      字体所占宽度
 *
 *  @return 富文本高度
 */
-(CGFloat)getSpaceLabelHeightwithSpeace:(CGFloat)lineSpeace withFont:(UIFont*)font withWidth:(CGFloat)width {
    NSMutableParagraphStyle *paraStyle = [[NSMutableParagraphStyle alloc] init];
    //    paraStyle.lineBreakMode = NSLineBreakByCharWrapping;
    /** 行高 */
    paraStyle.lineSpacing = lineSpeace;
    // NSKernAttributeName字体间距
    NSDictionary *dic = @{NSFontAttributeName:font, NSParagraphStyleAttributeName:paraStyle, NSKernAttributeName:@1.5f
                          };
    CGSize size = [self boundingRectWithSize:CGSizeMake(width,MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil].size;
    return size.height;
}


/**
 *  设置段落样式
 *
 *  @param lineSpacing 行高
 *  @param textcolor   字体颜色
 *  @param font        字体
 *
 *  @return 富文本
 */
-(NSAttributedString *)stringWithParagraphlineSpeace:(CGFloat)lineSpacing
                                           textColor:(UIColor *)textcolor
                                            textFont:(UIFont *)font {
    // 设置段落
    NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineSpacing = lineSpacing;
    // NSKernAttributeName字体间距
    NSDictionary *attributes = @{ NSParagraphStyleAttributeName:paragraphStyle,NSKernAttributeName:@1.5f};
    NSMutableAttributedString * attriStr = [[NSMutableAttributedString alloc] initWithString:self attributes:attributes];
    // 创建文字属性
    NSDictionary * attriBute = @{NSForegroundColorAttributeName:textcolor,NSFontAttributeName:font};
    [attriStr addAttributes:attriBute range:NSMakeRange(0, self.length)];
    return attriStr;
}

计算attributeText的宽高用上面的方法有时会不准~!so,2333

NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc]initWithString:@"hello YYLabel"];
YYTextContainer *container = [YYTextContainer containerWithSize:CGSizeMake(maxSize.width, MAXFLOAT)];
YYTextLayout *textLayout = [YYTextLayout layoutWithContainer:container text:attrString];
CGSize size =textLayout.textBoundingSize;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容