UILabel富文本

在別的地方看到的辛藻,用swift重寫了一下吱肌。僅僅是為了練手仰禽,方便以后查看(好吧纺蛆,方便以后復(fù)制粘貼)??
這里只給出了幾個樣例勇边,其它的根據(jù)文檔類推了;相關(guān)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 = "途牛旅游網(wǎng)于2006年10月創(chuàng)立于南京,以“讓旅游更簡單”為使命奕坟,為消費(fèi)者提供由北京清笨、天津、上海苛萎、廣州检号、深圳、南京等64個城市出發(fā)的旅游產(chǎn)品預(yù)訂服務(wù)翘盖,產(chǎn)品全面凹蜂,價(jià)格透明,全年365天24小時(shí)400電話預(yù)訂汰瘫,并提供豐富的后續(xù)服務(wù)和保障擂煞。\n      途牛旅游網(wǎng)提供8萬余種旅游產(chǎn)品供消費(fèi)者選擇颈娜,涵蓋跟團(tuán)、自助官辽、自駕同仆、郵輪、酒店、簽證市怎、景區(qū)門票以及公司旅游等辛慰,已成功服務(wù)累計(jì)超過400萬人次出游帅腌。2014年12月15日,途牛旅游網(wǎng)宣布與弘毅投資速客、京東商城溺职、攜程旗下子公司“攜程投資”以及途牛首席執(zhí)行官與首席運(yùn)營官簽訂股權(quán)認(rèn)購協(xié)議。根據(jù)協(xié)議途牛將向上述投資者出售1.48億美元的新發(fā)行股份浪耘。[1]\n       2015年11月24日点待,途牛旅游網(wǎng)與海航旅游集團(tuán)共同宣布戰(zhàn)略結(jié)盟。海航旅游戰(zhàn)略投資途牛5億美元状原,雙方將利用各自優(yōu)質(zhì)資源苗踪,在線上旅游、航空毕莱、酒店服務(wù)等領(lǐng)域開展深度合作颅夺。[2]易觀報(bào)告顯示,2015年第3季度部服,途牛交易規(guī)模達(dá)到46.5億元人民幣拗慨,同比增長141.1%奉芦。這已是途牛連續(xù)三個季度同比增速超過三位數(shù):2015年第二季度時(shí)剧蹂,途牛交易規(guī)模同比增長135.3%宠叼;第一季度,這一數(shù)據(jù)為122.8%筹裕。\n        從增速來看窄驹,途牛再度蟬聯(lián)行業(yè)第一证逻。[3]以全年業(yè)績來看,途牛2015年的凈收入為76億元人民幣(合11.802億美元)丈咐,較2014年增長116.3%龙宏。收入增長主要來自于跟團(tuán)游银酗、自助游及其他收入的增長。2015年總出游人次為4449053蛙讥,較2014年的2181834人次增長103.9%灭衷。[4]adfasdfadf"
        
        let stringLen = text.characters.count
        
        let attrString = NSMutableAttributedString(string: text)
        
        //設(shè)置字體
        let attrFont = UIFont.systemFont(ofSize: 13.0)
        attrString.addAttribute(NSFontAttributeName, value: attrFont, range: NSRange(location: 0, length: stringLen))
        
        //設(shè)置傾斜,需要導(dǎo)入coreText
        //FIXME: 字母迫像,數(shù)據(jù)瞳遍,符號出現(xiàn)傾斜傅蹂,而漢字沒有影響
        let italicFont = self.GetVariationOfFontWithTrait(baseFont: attrFont, trait: .traitItalic)
        attrString.addAttribute(NSFontAttributeName, value: italicFont, range: NSRange(location: 0, length: stringLen))
        
        // 設(shè)置顏色:字體顏色算凿,背景顏色
        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;//頭部縮進(jìn)犁功,相當(dāng)于左padding
        style.tailIndent = -10;//相當(dāng)于右padding
        style.lineHeightMultiple = 1.5;//行間距是多少倍
        style.alignment = .left;//對齊方式
        style.firstLineHeadIndent = 20;//首行頭縮進(jìn)
        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

/**
 *  計(jì)算富文本字體高度
 *
 *  @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;
}


/**
 *  設(shè)置段落樣式
 *
 *  @param lineSpacing 行高
 *  @param textcolor   字體顏色
 *  @param font        字體
 *
 *  @return 富文本
 */
-(NSAttributedString *)stringWithParagraphlineSpeace:(CGFloat)lineSpacing
                                           textColor:(UIColor *)textcolor
                                            textFont:(UIFont *)font {
    // 設(shè)置段落
    NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineSpacing = lineSpacing;
    // NSKernAttributeName字體間距
    NSDictionary *attributes = @{ NSParagraphStyleAttributeName:paragraphStyle,NSKernAttributeName:@1.5f};
    NSMutableAttributedString * attriStr = [[NSMutableAttributedString alloc] initWithString:self attributes:attributes];
    // 創(chuàng)建文字屬性
    NSDictionary * attriBute = @{NSForegroundColorAttributeName:textcolor,NSFontAttributeName:font};
    [attriStr addAttributes:attriBute range:NSMakeRange(0, self.length)];
    return attriStr;
}

計(jì)算attributeText的寬高用上面的方法有時(shí)會不準(zhǔn)~!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;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末靴庆,一起剝皮案震驚了整個濱河市炉抒,隨后出現(xiàn)的幾起案子稚叹,更是在濱河造成了極大的恐慌,老刑警劉巖塞茅,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件季率,死亡現(xiàn)場離奇詭異,居然都是意外死亡飒泻,警方通過查閱死者的電腦和手機(jī)鞭光,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蠢络,“玉大人衰猛,你說我怎么就攤上這事∩部祝” “怎么了啡省?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長髓霞。 經(jīng)常有香客問我卦睹,道長,這世上最難降的妖魔是什么方库? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮纵潦,結(jié)果婚禮上徐鹤,老公的妹妹穿的比我還像新娘垃环。我一直安慰自己,他們只是感情好返敬,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布遂庄。 她就那樣靜靜地躺著,像睡著了一般劲赠。 火紅的嫁衣襯著肌膚如雪涛目。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天凛澎,我揣著相機(jī)與錄音霹肝,去河邊找鬼。 笑死塑煎,一個胖子當(dāng)著我的面吹牛沫换,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播最铁,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼苗沧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了炭晒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤甥角,失蹤者是張志新(化名)和其女友劉穎网严,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗤无,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡震束,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了当犯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垢村。...
    茶點(diǎn)故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嚎卫,靈堂內(nèi)的尸體忽然破棺而出嘉栓,到底是詐尸還是另有隱情,我是刑警寧澤拓诸,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布侵佃,位于F島的核電站,受9級特大地震影響奠支,放射性物質(zhì)發(fā)生泄漏馋辈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一倍谜、第九天 我趴在偏房一處隱蔽的房頂上張望迈螟。 院中可真熱鬧叉抡,春花似錦、人聲如沸答毫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烙常。三九已至轴捎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蚕脏,已是汗流浹背侦副。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驼鞭,地道東北人秦驯。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像挣棕,于是被迫代替她去往敵國和親译隘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容