您的位置:首页 > Web前端 > CSS

IOS中自定义段落样式及大小的计算

2017-06-16 16:32 204 查看
首先设置段落样式用到了这个类

NSMutableParagraphStyle以及NSAttributedString的NSParagraphStyleAttributeName属性

创建一个段落风格 为其填充一些所需属性

//创建
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
//断行模式
[paragraphStyle setLineBreakMode:NSLineBreakByWordWrapping];
//书写方向
[paragraphStyle setBaseWritingDirection:NSWritingDirectionLeftToRight];
//字间距
[paragraphStyle setLineSpacing:5.0f];
//行间距倍数
[paragraphStyle setLineHeightMultiple:1.5f];
//对齐方式
[paragraphStyle setAlignment:NSTextAlignmentCenter];
//首行缩进
[paragraphStyle setFirstLineHeadIndent:20.0f];
//段落前端缩进 (不包括首行)
[paragraphStyle setHeadIndent:10.0f];
//段落尾端缩进 (注意 这里的尾端缩进的参数并非是缩进的数值,而是显示的总长度)
[paragraphStyle setTailIndent:Screen_Width - margin * 2 - 10];
//最小行高
[paragraphStyle setMinimumLineHeight:20.0f];
//最大行高
[paragraphStyle setMaximumLineHeight:30.0f];
//段间距
[paragraphStyle setParagraphSpacing:10.0f];
//连字符属性(范围在0-1之间)
[paragraphStyle setHyphenationFactor:0.3];


然后将此风格赋值至某段字符串的NSParagraphStyleAttributeName属性内

UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];
label.numberOfLines = 0;
label.attributedText = [[NSAttributedString alloc] initWithString:showText attributes:@{NSParagraphStyleAttributeName:paragraphStyle}];


至此就完成了段落样式的赋值

接下来用boundingRectWithSize方法 填充相同的段落样式来计算此段文字的宽度或高度 如下

float max = 8000;

CGRect rect = [string boundingRectWithSize:CGSizeMake(width, max)//限制最大的宽度和高度
options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesFontLeading  |NSStringDrawingUsesLineFragmentOrigin//采用换行模式
attributes:@{NSFontAttributeName: font,NSParagraphStyleAttributeName:paragraphStyle}//传人的字体字典
context:nil];
CGRect rect = [string boundingRectWithSize:CGSizeMake(max, height)//限制最大的宽度和高度
options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesFontLeading  |NSStringDrawingUsesLineFragmentOrigin//采用换行模式
attributes:@{NSFontAttributeName: font,NSParagraphStyleAttributeName:paragraphStyle}//传人的字体字典
context:nil];


取得rect.size 就是所需的此段落样式下文字的宽度或高度
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息