iOS 文字后添加標(biāo)簽或者“查看更多”之類的按鈕

我們經(jīng)常會(huì)有這樣的需求:
在文字后面添加 視圖展示 標(biāo)簽或者按鈕“點(diǎn)擊查看”

解決方案:
獲取到這段文字的最后一個(gè)內(nèi)容所在的位置即它的坐標(biāo)负甸,只要知道了這個(gè)位置就可以在后面添加其他內(nèi)容

代碼思路:

//高固定寬不固定: 當(dāng)內(nèi)容為一行的時(shí)候:contentLabel所在的尺寸:

CGRect OneLineRect = [text boundingRectWithSize:CGSizeMake(MAXFLOAT, height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading  attributes:dic context:NULL];

CGSize oneLineSize = OneLineRect.size;

//寬固定高不固定: 當(dāng)內(nèi)容為多行的時(shí)候:

CGRect multipleLinesRect = [text boundingRectWithSize:CGSizeMake(kLabelWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin |
                            NSStringDrawingUsesFontLeading attributes:dic context:NULL];
CGSize multipleLinesSize = multipleLinesRect.size;

通過(guò)兩種size對(duì)比獲取到相應(yīng)的位置:

CGPoint lastPoint ;
CGFloat width = 0.0;
CGFloat proY = 0.0;

//判斷是否多行顯示:  
if (oneLineSize.width <= multipleLinesSize.width) 
{
    //內(nèi)容顯示1行:最后一個(gè)字所在的 x: label的x + 這行文字的寬度,y不變
    lastPoint = CGPointMake(contentLabX + oneLineSize.width, _contentLabel.frame.origin.y);
    width = oneLineSize.width;
    proY = _contentLabel.frame.origin.y;
   
} else {

    int oneLineW = (int)oneLineSize.width;
    int multiLinew = (int)multipleLinesSize.width;
    int value = oneLineW %  multiLinew  ;
    
    NSLog(@"一行的寬度:%f  多行的寬度:%f 一行總寬度:%f",oneLineSize.width,multipleLinesSize.width,kLabelWidth);
    lastPoint = CGPointMake(contentLabX  + value , multipleLinesSize.height - oneLineSize.height );
    width = kLabelWidth;
    height = multipleLinesSize.height;
    proY = multipleLinesSize.height - oneLineSize.height +    _contentLabel.frame.origin.y;
}

lastPoint即為需要的位置春宣。

一行的效果:


一行文字

多行的效果:


多行文字

完整代碼:

import "ViewController.h"

define kWidth ([[UIScreen mainScreen] bounds].size.width)

define kLabelWidth (kWidth - 30)

@interface ViewController ()

@property(nonatomic, strong) UILabel * contentLabel;
@property(nonatomic, strong) UILabel * proLab;
@property(nonatomic, strong) UILabel * personaLab;

@end

@implementation ViewController

  -   (void)viewDidLoad {
[super viewDidLoad];

CGFloat contentLabX = 15;

_contentLabel = [[UILabel alloc] initWithFrame:CGRectMake(contentLabX, 80, kLabelWidth, 25)];
_contentLabel.font = [UIFont systemFontOfSize:18.0];
_contentLabel.backgroundColor = [UIColor lightGrayColor];
_contentLabel.lineBreakMode = NSLineBreakByWordWrapping;
_contentLabel.numberOfLines = 0;
[self.view addSubview:_contentLabel];
NSString  * text = [NSString stringWithFormat:@"%@", @"多行冊(cè)書數(shù)據(jù):若該內(nèi)容屬于機(jī)構(gòu)性質(zhì)的熊镣,則標(biāo)記“機(jī)構(gòu)”標(biāo)識(shí);若該內(nèi)容屬于個(gè)人所有,則標(biāo)記“個(gè)人”標(biāo)識(shí)  "];
 //  text = @"1行測(cè)試數(shù)據(jù)";
  _contentLabel.text = text;

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont systemFontOfSize:18.0], NSFontAttributeName, nil];
//默認(rèn)label的高度:
CGFloat height = 25;

//高固定寬不固定: 當(dāng)內(nèi)容為一行的時(shí)候:
CGRect OneLineRect = [text boundingRectWithSize:CGSizeMake(MAXFLOAT, height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading  attributes:dic context:NULL];

CGSize oneLineSize = OneLineRect.size;
if (oneLineSize.height < height) {
    oneLineSize.height = height;
}


//寬固定高不固定: 當(dāng)內(nèi)容為多行的時(shí)候:
CGRect multipleLinesRect = [text boundingRectWithSize:CGSizeMake(kLabelWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin |
                            NSStringDrawingUsesFontLeading attributes:dic context:NULL];
CGSize multipleLinesSize = multipleLinesRect.size;


CGPoint lastPoint ;
CGFloat width = 0.0;
CGFloat proY = 0.0;

//判斷是否折行:  
if (oneLineSize.width <= multipleLinesSize.width) 
{
    //內(nèi)容顯示1行:最后一個(gè)字所在的 x: label的x + 這行文字的寬度耕陷,y不變
    lastPoint = CGPointMake(contentLabX + oneLineSize.width, _contentLabel.frame.origin.y);
    width = oneLineSize.width;
    proY = _contentLabel.frame.origin.y;
   
} else {

    int oneLineW = (int)oneLineSize.width;
    int multiLinew = (int)multipleLinesSize.width;
    int value = oneLineW %  multiLinew  ;
    
    NSLog(@"一行的寬度:%f  多行的寬度:%f 一行總寬度:%f",oneLineSize.width,multipleLinesSize.width,kLabelWidth);
    lastPoint = CGPointMake(contentLabX  + value , multipleLinesSize.height - oneLineSize.height );
    width = kLabelWidth;
    height = multipleLinesSize.height;
    proY = multipleLinesSize.height - oneLineSize.height +      _contentLabel.frame.origin.y;
}


CGFloat x = lastPoint.x;
_contentLabel.frame = CGRectMake(contentLabX, 80, width, height);

 //添加需要的視圖:
_proLab = [UILabel new];
_proLab.frame = CGRectMake(x + 20, proY , 40, 25);
_proLab.text = @"機(jī)構(gòu)";

_proLab.textColor = [UIColor redColor];
_proLab.font = [UIFont systemFontOfSize:14.0];
_proLab.layer.masksToBounds = YES;
_proLab.textAlignment = NSTextAlignmentCenter;
_proLab.layer.borderColor = [UIColor redColor].CGColor;
_proLab.layer.borderWidth = 1.0;
[self.view addSubview:_proLab];


_personaLab = [UILabel new];
_personaLab.frame = CGRectMake(CGRectGetMaxX(_proLab.frame) + 10, proY , 40, 25);
_personaLab.text = @"個(gè)人";
_personaLab.textColor = [UIColor redColor];
_personaLab.font = [UIFont systemFontOfSize:14.0];
_personaLab.layer.masksToBounds = YES;
_personaLab.textAlignment = NSTextAlignmentCenter;
_personaLab.layer.borderColor = [UIColor blueColor].CGColor;
_personaLab.layer.borderWidth = 1.0;
[self.view addSubview:_personaLab];


// Do any additional setup after loading the view, typically from a nib.

}

@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末佃蚜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子链峭,更是在濱河造成了極大的恐慌畦娄,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弊仪,死亡現(xiàn)場(chǎng)離奇詭異熙卡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)励饵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門驳癌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人役听,你說(shuō)我怎么就攤上這事颓鲜”砭剑” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵甜滨,是天一觀的道長(zhǎng)乐严。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任券躁,我火速辦了婚禮,結(jié)果婚禮上既琴,老公的妹妹穿的比我還像新娘。我一直安慰自己泡嘴,他們只是感情好甫恩,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著酌予,像睡著了一般磺箕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上霎终,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天滞磺,我揣著相機(jī)與錄音升薯,去河邊找鬼莱褒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛涎劈,可吹牛的內(nèi)容都是我干的广凸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蛛枚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼谅海!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蹦浦,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤扭吁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后盲镶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侥袜,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年溉贿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了枫吧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宇色,死狀恐怖九杂,靈堂內(nèi)的尸體忽然破棺而出颁湖,到底是詐尸還是另有隱情,我是刑警寧澤例隆,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布甥捺,位于F島的核電站,受9級(jí)特大地震影響裳擎,放射性物質(zhì)發(fā)生泄漏涎永。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一鹿响、第九天 我趴在偏房一處隱蔽的房頂上張望羡微。 院中可真熱鬧,春花似錦惶我、人聲如沸妈倔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盯蝴。三九已至,卻和暖如春听怕,著一層夾襖步出監(jiān)牢的瞬間捧挺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工尿瞭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闽烙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓声搁,卻偏偏與公主長(zhǎng)得像黑竞,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疏旨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

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