樣式:
XIB的設(shè)置:
text為plain不影響;attributed適用于IOS7的文本定制片择;lines=0代表多行潜的;Word Wrap代表自動(dòng)換行;
將Label上下左右都設(shè)置約束,寬高不設(shè)約束即可,或者如下圖
位置和大小都確定了字管,當(dāng)內(nèi)容增大時(shí)啰挪,希望高度進(jìn)行提高,所以使用>=來(lái)表示內(nèi)容增大時(shí)動(dòng)態(tài)的增大其高度
這樣就完成了動(dòng)態(tài)換行和調(diào)整高度
--------------------------------------- 華麗的分割線 -------------------------------------
另外再說(shuō)一種場(chǎng)景
背景:
相信很多朋友都遇到過(guò)嘲叔,文本的內(nèi)容長(zhǎng)度不一亡呵,需要根據(jù)內(nèi)容的多少來(lái)自動(dòng)換行處理。
場(chǎng)景:
很多APP中評(píng)論硫戈,有的評(píng)論長(zhǎng)锰什,有的評(píng)論短,有的一行,有的多行歇由。
下面以評(píng)論的實(shí)現(xiàn)為例來(lái)說(shuō)說(shuō)具體如何實(shí)現(xiàn)卵牍。
技術(shù)點(diǎn):
UILabel的自動(dòng)換行,自動(dòng)換行的同時(shí)要自適應(yīng)Frame大小沦泌。
UITableView的行高自適應(yīng)內(nèi)容糊昙,實(shí)時(shí)調(diào)整高度。
實(shí)現(xiàn)方法:
UILabel的自動(dòng)換行
獲取UILabel的frame大小
獲取UILabel的字體大小
獲取UILabel的文本內(nèi)容
根據(jù)上面的3部分?jǐn)?shù)據(jù)谢谦,計(jì)算文本顯示區(qū)域大小
根據(jù)4計(jì)算的大小释牺,實(shí)時(shí)改變UILabel的frame
code如下:
NSString * labelStr = @“你好,這是UILabel的自動(dòng)換行測(cè)試內(nèi)容回挽,主要實(shí)現(xiàn)多行數(shù)據(jù)的自動(dòng)換行没咙,自適應(yīng)不同行數(shù)的數(shù)據(jù)”;
CGSize labelSize = {0, 0};
labelSize = [labelStr sizeWithFont:[UIFont systemFontOfSize:14]
constrainedToSize:CGSizeMake(200.0, 5000)
lineBreakMode:UILineBreakModeWordWrap];
//14 為UILabel的字體大小
//200為UILabel的寬度,5000是預(yù)設(shè)的一個(gè)高度千劈,表示在這個(gè)范圍內(nèi)
label.numberOfLines = 0;//表示label可以多行顯示
label.lineBreakMode = UILineBreakModeCharacterWrap;//換行模式祭刚,與上面的計(jì)算保持一致。
label.frame = CGRectMake(label.frame.origin.x, label.frame.origin.y, label.frame.size.width, labelSize.height);//保持原來(lái)Label的位置和寬度墙牌,只是改變高度涡驮。
UITableView的行高自適應(yīng)內(nèi)容
這個(gè)和上面的類似,直接上Code:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString * labelStr = @“你好喜滨,這是UILabel的自動(dòng)換行測(cè)試內(nèi)容捉捅,主要實(shí)現(xiàn)多行數(shù)據(jù)的自動(dòng)換行,自適應(yīng)不同行數(shù)的數(shù)據(jù)”;
CGSize labelSize = {0, 0};
labelSize = [labelStr sizeWithFont:[UIFont systemFontOfSize:14]
constrainedToSize:CGSizeMake(200.0, 5000)
lineBreakMode:UILineBreakModeWordWrap];
//14 為UILabel的字體大小
//200為UILabel的寬度虽风,5000是預(yù)設(shè)的一個(gè)高度棒口,表示在這個(gè)范圍內(nèi)
return labelSize.height + delta;
//delta 是Cell除了自適應(yīng)控件UILabel外的其它控件所占的高度。
}
小結(jié):實(shí)現(xiàn)上面2個(gè)技術(shù)點(diǎn)后辜膝,評(píng)論相關(guān)的APP或者類似的APP都可以做到自適應(yīng)內(nèi)容无牵,根據(jù)內(nèi)容多少自動(dòng)換行,自動(dòng)調(diào)整控件的位置和大小厂抖,達(dá)到最優(yōu)的顯示效果茎毁。
iOS 8.0 以上
self.tableView.estimatedRowHeight = 60 ; //估算tableViewcell的高度
self.tableView.rowHeight = UITableViewAutomaticDimension;
UILabel 的 lineBreakMode屬性 :設(shè)置標(biāo)簽文字過(guò)長(zhǎng)時(shí)的顯示方式。
label.lineBreakMode = NSLineBreakByCharWrapping; //以字符為顯示單位顯示验游,后面部分省略不顯示充岛。
label.lineBreakMode = NSLineBreakByClipping; //剪切與文本寬度相同的內(nèi)容長(zhǎng)度,后半部分被刪除耕蝉。
label.lineBreakMode = NSLineBreakByTruncatingHead; //前面部分文字以……方式省略崔梗,顯示尾部文字內(nèi)容。
label.lineBreakMode = NSLineBreakByTruncatingMiddle; //中間的內(nèi)容以……方式省略垒在,顯示頭尾的文字內(nèi)容蒜魄。
label.lineBreakMode = NSLineBreakByTruncatingTail; //結(jié)尾部分的內(nèi)容以……方式省略,顯示頭的文字內(nèi)容。
label.lineBreakMode = NSLineBreakByWordWrapping; //以單詞為顯示單位顯示谈为,后面部分省略不顯示旅挤。
到此為止.記錄下容易忘的細(xì)節(jié)同大家分享!!!