Swift 多行l(wèi)abel獲取每行字符串

CoreText
  • 變態(tài)需求要根據(jù)屏幕寬度谈秫,first name長(zhǎng)度不確定
  1. first name較短
    1. 若 Good morning, first name,1行能顯示下, 用 Good morning, first name
    2. 若 Good morning, first name,1行不能顯示下:若Hi, first name 能顯示下鱼鼓,則用Hi否則考慮兩行的情況拟烫。
      兩行情況同上,但是換行的時(shí)候得在第一行的末尾加 -
  2. first name特別長(zhǎng)
    1. 用Hi,且末尾得加上 ...
  • 先上代碼吧
        // 1.初始化路徑
        let path = CGPath(rect: self.bounds, transform: nil)
        // 2.初始化framesetter
        let framesetter = CTFramesetterCreateWithAttributedString(text)
        
        // 3.繪制frame
        let frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, text.length), path, nil)
        self.ctframe = frame
    
        // 獲得CTLine數(shù)組
        let lines = CTFrameGetLines(frame)
        
        // 獲得行數(shù)
        let numberOfLines = CFArrayGetCount(lines)
        
        // 獲得每一行的origin, CoreText的origin是在字形的baseLine處的
        var lineOrigins = [CGPoint](repeating: CGPoint(x: 0, y: 0), count: numberOfLines)
        CTFrameGetLineOrigins(frame, CFRangeMake(0, 0), &lineOrigins)
        
        // 遍歷每一行
        for index in 0..<numberOfLines {
            let origin = lineOrigins[index]
            let line = unsafeBitCast(CFArrayGetValueAtIndex(lines, index), to: CTLine.self)
            let lineRef: CTLine = line
            let lineRange: CFRange = CTLineGetStringRange(lineRef)
            let range: NSRange = NSMakeRange(lineRange.location, lineRange.length)
            let lineString = (attributedText?.attributedSubstring(from: range)).string
        }

這樣就得到了每一行的characters
重要的是這個(gè)是利用CoreText 的富文本屬性去做的迄本,一定要是這個(gè)Label的NSMutableAttributedString, 然后把得到的string轉(zhuǎn)成 AttributedString硕淑,給label的富文本屬性,這樣才正確嘉赎。

  • 富文本屬性簡(jiǎn)單用法舉例:
        let font = UIFont.boldSystemFont(ofSize: 20)
    
        let attributedText = NSMutableAttributedString(string: content)
        // 字體顏色
        attributedText.addAttribute(NSForegroundColorAttributeName, value: UIColor.red, range: NSMakeRange(0, attributedText.length))
        // 字體
        attributedText.addAttribute(NSFontAttributeName, value: font, range: NSMakeRange(0, attributedText.length))
        // 段落樣式
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.alignment = .center
        paragraphStyle.lineBreakMode = .byCharWrapping
        // 行間距
        paragraphStyle.lineSpacing = 5.0
        // 字符間距
        paragraphStyle.paragraphSpacing = 2.0
        attributedText.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: NSRange(location: 0, length: attributedText.length))
        label.attributedText = attributedText
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末置媳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子公条,更是在濱河造成了極大的恐慌拇囊,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件靶橱,死亡現(xiàn)場(chǎng)離奇詭異寥袭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)关霸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門传黄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人队寇,你說我怎么就攤上這事膘掰。” “怎么了佳遣?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)零渐。 經(jīng)常有香客問我窒舟,道長(zhǎng),這世上最難降的妖魔是什么相恃? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任辜纲,我火速辦了婚禮,結(jié)果婚禮上拦耐,老公的妹妹穿的比我還像新娘耕腾。我一直安慰自己,他們只是感情好杀糯,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布扫俺。 她就那樣靜靜地躺著,像睡著了一般固翰。 火紅的嫁衣襯著肌膚如雪狼纬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天骂际,我揣著相機(jī)與錄音疗琉,去河邊找鬼。 笑死歉铝,一個(gè)胖子當(dāng)著我的面吹牛盈简,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播太示,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼柠贤,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了类缤?” 一聲冷哼從身側(cè)響起臼勉,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎餐弱,沒想到半個(gè)月后宴霸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡膏蚓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年猖败,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片降允。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恩闻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出剧董,到底是詐尸還是另有隱情幢尚,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布翅楼,位于F島的核電站尉剩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏毅臊。R本人自食惡果不足惜理茎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧皂林,春花似錦朗鸠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沟启,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間德迹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工蹬竖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人币厕。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓芽腾,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親阴绢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子艰躺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)左电,斷路器页响,智...
    卡卡羅2017閱讀 134,628評(píng)論 18 139
  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,723評(píng)論 0 10
  • 學(xué)習(xí)完上一章的同學(xué)會(huì)有疑問,做為消費(fèi)者要如何調(diào)用服務(wù)砾赔,上一章雖然以實(shí)現(xiàn)此功能蝌箍,顯然這不是我們想要的解決方法,接下來...
    coolchun閱讀 11,570評(píng)論 0 3
  • ??10?月24日 我喜歡的一個(gè)日子 00:24 開始我在簡(jiǎn)書的一天 記錄簡(jiǎn)單生活 小小心情 下面 我要說晚安啦 ...
    Moon_大楊閱讀 131評(píng)論 0 0
  • 他好像從來都沒笑過 眉毛總是皺著 他好像從來都沒動(dòng)過 眼睛都不會(huì)眨 他好像從來也不說話 嘴巴也懶得張 他好像不是因...
    騷年有夢(mèng)就嚼著炫邁去追呀閱讀 278評(píng)論 2 4