pdfptable 设置行间距_[转载]CoreText 轻松设置字体大小,间距,行间距,段间距,算高度...
#import "Myview.h"
#import
@implementation Myview
-(void)dealloc
{
[_text release];
[super dealloc];
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.font = 15;
self.text
= @"请给myview.text赋值";
self.line = 10;
self.paragraph = 20;
self.character = 4;
}
return self;
}
-(void)drawRect:(CGRect)rect
{
[super drawRect:rect];
//创建AttributeStringfdsa
NSMutableAttributedString *string = [[NSMutableAttributedString
alloc]
initWithString:self.text];
//创建字体以及字体大小
CTFontRef helvetica = CTFontCreateWithName(CFSTR("Helvetica"), self.font, NULL);
CTFontRef helveticaBold = CTFontCreateWithName(CFSTR("Helvetica"), self.font, NULL);
//字体,把helvetica
样式加到整个,string上
[string addAttribute:(id)kCTFontAttributeName
value:(id)helvetica
range:NSMakeRange(0, [string length])];
//字体样式
,把helveticaBold
样式加到整个,string上
[string addAttribute:(id)kCTFontAttributeName
value:(id)helveticaBold
range:NSMakeRange(0, [string length])];
//颜色,此处为黑色,你可以自己改颜色,[UIColor
redColor]
[string addAttribute:(id)kCTForegroundColorAttributeName
value:(id)[UIColor blackColor].CGColor
range:NSMakeRange(0, [string length])];
//创建文本对齐方式
CTTextAlignment alignment =
kCTJustifiedTextAlignment;//对齐方
CTParagraphStyleSetting alignmentStyle;
alignmentStyle.spec=kCTParagraphStyleSpecifierAlignment;
alignmentStyle.valueSize=sizeof(alignment);
alignmentStyle.value=&alignment;
//设置字体间距
long number
= self.character;
CFNumberRef num = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt8Type, &number);
[string addAttribute:(id)kCTKernAttributeName value:(id)num range:NSMakeRange(0, [string length])];
CFRelease(num);
//创建文本,
行间距
CGFloat lineSpace=self.line;//间距数据
CTParagraphStyleSetting lineSpaceStyle;
lineSpaceStyle.spec=kCTParagraphStyleSpecifierLineSpacing;
lineSpaceStyle.valueSize=sizeof(lineSpace);
lineSpaceStyle.value=&lineSpace;
//设置
段落间距
CGFloat paragraph = self.paragraph;
CTParagraphStyleSetting paragraphStyle;
paragraphStyle.spec
=
kCTParagraphStyleSpecifierParagraphSpacing;
paragraphStyle.valueSize = sizeof(CGFloat);
paragraphStyle.value = ¶graph;
//创建样式数组
CTParagraphStyleSetting settings[]={
alignmentStyle,lineSpaceStyle,paragraphStyle
};
//设置样式
CTParagraphStyleRef paragraphStyle1 =
CTParagraphStyleCreate(settings,
sizeof(settings));
//给字符串添加样式attribute
[string addAttribute:(id)kCTParagraphStyleAttributeName
value:(id)paragraphStyle1
range:NSMakeRange(0, [string length])];
// layout master
CTFramesetterRefframesetter =
CTFramesetterCreateWithAttributedString((CFAttributedStringRef)string);
//计算文本绘制size
,这里300是文字宽度,你可以自己更改为247,但是要记得,在height 方法里的这个位置,也改为247
CGSize tmpSize
= CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0,0),
NULL, CGSizeMake(300,
MAXFLOAT), NULL);
//创建textBoxSize以设置view的frame
CGSize textBoxSize = CGSizeMake((int)tmpSize.width + 1, (int)tmpSize.height + 1);
// NSLog(@"textBoxSize0 ==
%f,%f,%f",textBoxSize.width,textBoxSize.height,textBoxSize.width /
textBoxSize.height);
self.frame = CGRectMake(0, 0,
textBoxSize.width ,
textBoxSize.height);
[string release];
//-
(void)drawRect:(CGRect)rect;代码
CGMutablePathRef leftColumnPath =
CGPathCreateMutable();
CGPathAddRect(leftColumnPath, NULL,
CGRectMake(0, 0,
self.bounds.size.width,
self.bounds.size.height));
CTFrameRef leftFrame = CTFramesetterCreateFrame(framesetter,
CFRangeMake(0, 0),
leftColumnPath, NULL);
// NSLog(@"textBoxSize1 ==
%f,%f",self.frame.size.width,self.frame.size.height);
// flip the coordinate system
CGContextRef context =
UIGraphicsGetCurrentContext();
CGContextClearRect(context, self.frame);
CGContextSetFillColorWithColor(context,
[[UIColor
whiteColor]CGColor]);
CGContextFillRect(context, CGRectMake(0, 0,
320, self.frame.size.height));
CGContextSetTextMatrix(context,
CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
// draw
CTFrameDraw(leftFrame, context);
// cleanup
CGPathRelease(leftColumnPath);
CFRelease(framesetter);
//CFRelease(helvetica);
// CFRelease(helveticaBold);
UIGraphicsPushContext(context);
}
#pragma mark - 计算高度的方法
//这个方法,剪切到你要用的那个类里面,就ok了
// 或者,就放这里,但改成实例方法,+(CGSize)height:^^^^^^^^^
-(CGSize)height:(NSString *)text Font:(CGFloat)font Character:(CGFloat)character Line:(CGFloat)line Pragraph:(CGFloat)pragraph
{
//创建AttributeStringfdsa
NSMutableAttributedString *string = [[NSMutableAttributedString
alloc]
initWithString:text];
//创建字体以及字体大小
CTFontRef helvetica = CTFontCreateWithName(CFSTR("Helvetica"), font, NULL);
CTFontRef helveticaBold = CTFontCreateWithName(CFSTR("Helvetica"), font, NULL);
//添加字体目标字符串从下标0开始到字符串结尾
[string addAttribute:(id)kCTFontAttributeName
value:(id)helvetica
range:NSMakeRange(0, [string length])];
//添加字体目标字符串从下标0开始,截止到4个单位的长度
[string addAttribute:(id)kCTFontAttributeName
value:(id)helveticaBold
range:NSMakeRange(0, [string length])];
[string addAttribute:(id)kCTForegroundColorAttributeName
value:(id)[UIColor whiteColor].CGColor
range:NSMakeRange(0, [string length])];
CTTextAlignment alignment =
kCTJustifiedTextAlignment;//这种对齐方式会自动调整,使左右始终对齐
CTParagraphStyleSetting alignmentStyle;
alignmentStyle.spec=kCTParagraphStyleSpecifierAlignment;//指定为对齐属性
alignmentStyle.valueSize=sizeof(alignment);
alignmentStyle.value=&alignment;
//设置字体间距
long number = character;
CFNumberRef num = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt8Type, &number);
[string addAttribute:(id)kCTKernAttributeName value:(id)num range:NSMakeRange(0, [string length])];
CFRelease(num);
//创建文本行间距
CGFloat lineSpace=line;//间距数据
CTParagraphStyleSetting lineSpaceStyle;
lineSpaceStyle.spec=kCTParagraphStyleSpecifierLineSpacing;//指定为行间距属性
lineSpaceStyle.valueSize=sizeof(lineSpace);
lineSpaceStyle.value=&lineSpace;
//设置段落间距
CGFloat paragraph = pragraph;
CTParagraphStyleSetting paragraphStyle;
paragraphStyle.spec
=
kCTParagraphStyleSpecifierParagraphSpacing;
paragraphStyle.valueSize = sizeof(CGFloat);
paragraphStyle.value = ¶graph;
//创建样式数组
CTParagraphStyleSetting settings[]={
alignmentStyle,lineSpaceStyle,paragraphStyle
};
//设置样式
CTParagraphStyleRef paragraphStyle1 =
CTParagraphStyleCreate(settings,
sizeof(settings));
//给字符串添加样式attribute
[string addAttribute:(id)kCTParagraphStyleAttributeName
value:(id)paragraphStyle1
range:NSMakeRange(0, [string length])];
// layout master
CTFramesetterRefframesetter =
CTFramesetterCreateWithAttributedString((CFAttributedStringRef)string);
//计算文本绘制size
CGSize tmpSize
= CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0,0),
NULL, CGSizeMake(300,
MAXFLOAT), NULL);
//创建textBoxSize以设置view的frame
CGSize textBoxSize = CGSizeMake((int)tmpSize.width + 1, (int)tmpSize.height + 1);
[string release];
return textBoxSize;
}
@end
3.
注意上面的Myview 默认要绘制的文字宽度是 300,如果你想要的文字宽度是 200,请你去改代码,
//计算文本绘制size
,这里300是文字宽度,你可以自己更改为200,但是要记得,在height 方法里的这个位置,也改为200,这个很重要
CGSizetmpSize
=CTFramesetterSuggestFrameSizeWithConstraints(framesetter,CFRangeMake(0,0),NULL,CGSizeMake(300,MAXFLOAT),NULL);
把这个MyView
加入到你的工程里面,就完成了工作的80%了,接下来,更简单,
4 看完下面的,你就会了
我们知道,不同文字他的高度,是不确定的,如果超过 height 460,548,那么你一个屏幕是显示不下的
这时候,我们怎么用这个Myview呢
请看下面的具体用法,
@property(nonatomic,assign)CGSize
size;
@property(nonatomic,retain)NSString *text;
-
(void)viewDidLoad
{
[super
viewDidLoad];
self.text =
@"";你自己赋值,
self.size
= [self height:self.text
Font:15 Character:4
Line:10 Pragraph:20];
//必须先计算高度
NSLog(@"width:%f, height:%f",self.size.width,self.size.height);
}
//在下面这个方法中的用法,
-(UITableViewCell*)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
Myview
*myview =
[[Myview
alloc]initWithFrame:CGRectMake(0, 0, self.size.width, self.size.height)];//知道为什么,先算高度了吧
myview.text = self.text;
myview.font = 15;
myview.line = 10;
myview.paragraph = 20;
myview.character = 4; //这些值比须和,height方法里传的5个参数一一对 //应相等。
UIView *v1 = [[UIView alloc]initWithFrame:CGRectMake(8, 10,
304, self.size.height)]; //这里并不是多此一举,不信你自己去掉试试,你会发
//现,你画的文字,是从(0,y,width,height)这里开始画的,和里myview的
//CGRectMake(x,y,300,height)x,y无关。
[v1 addSubview:myview];
[cell addSubview:v1];
当然cell的高度,也是我们算好了的
-(CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return self.size.height+20;
}
5
到此,你应该已经会了,如果关键的第4步,你没看懂,那么请看下篇,我贴出了,使用Myview的详细全部代码,你直接使用之后就明白了。
pdfptable 设置行间距_[转载]CoreText 轻松设置字体大小,间距,行间距,段间距,算高度...相关推荐
- clion调整字体打下奥_Clion、IEDA、pycharm的一些简单设置步骤(设置中文菜单、输出中文、字体大小、背景颜色主题)...
Clion.IEDA.pycharm的设置及界面是一模一样的,下面我将按照Clion举例,但是在IEDA和pycharm是同样适用,按照方法设置即可 一.中文界面 clion.ieda.pycharm ...
- CoreText 轻松设置字体大小,间距,行间距,段间距,算高度
[http://blog.sina.com.cn/s/blog_691a202f0101bq6q.html] 下面主要讲,如何设置字体,间距,并计算(带特定段间距,行间距,字间距,字大小)文字的高度. ...
- 相机参数设置程序_自定义拍摄模式怎么设置?教你学会相机设置。
相机的模式转盘上,除了基本的全自动.程序自动.光圈/快门优先.手动.B门等拍摄模式,还有自定义拍摄模式,对于拍摄有哪些作用?该如何设置自定义拍摄模式呢? 一.自定义拍摄模式的作用 自定义拍摄模式,可以 ...
- burp爆破线程设置多少_多线程到底需要设置多少个线程?
我们在使用线程池的时候,会有两个疑问点: 线程池的线程数量设置过多会导致线程竞争激烈 如果线程数量设置过少的话,还会导致系统无法充分利用计算机资源 那么如何设置才不会影响系统性能呢?其实线程池的设置是 ...
- Latex 中设置 表格字体大小,行间距 等
Latex设置表格字体大小格式为: \begin{table}[h] \small %此处写字体大小控制命令 \begin{tabular} \end{tabular}\end{table} Late ...
- Mysql时区设置最佳实践,mysql设置时区_修改MySQL时区设置的方法
摘要 腾兴网为您分享:修改MySQL时区设置的方法,一直播,一点开,小猿口算,汤圆等软件知识,以及都优乐,daysmatter,乐学高考app,随缘漂流瓶,虚拟软件,平安知鸟,智能证件照app,新概念 ...
- 广告牌定时器怎么设置时间_定时开关如何设置时间呢
路灯定时开关怎么设置定时 内容如下:1.先按取消键5秒就可解锁设置2.如果有设置,先选择,然后选择校时,校分,这个是开:3.再次按设置,校时,校分,第一组就设置完成.以此类推下去就行.4.选择自动,或 ...
- 【java基础知识】设置表格内容居中显示,表格字体大小调整,表格列宽调整
一.表格内容居中显示 通过Netbeans创建表格后,默认表头和表格内容全部偏左显示,想要手动修改,需要先将自动创建的表格类改为public类型. 然后在表格代码部分后面添加下面代码: 1.表头居中显 ...
- html 字号 宽度 像素,JS根据设备宽度设置根节点(html)font-size字体大小
JS根据设备宽度设置根节点(html)font-size字体大小 发布时间:2020-04-10 20:28:04 来源:51CTO 阅读:3210 作者:pmlinjian JS根据设备宽度设置根节 ...
最新文章
- [Oracle PL/SQL]当数据表设计成具有父ID的时候,当需要选择所有与父ID同根生的所有节点的时候,使用的SQL语句...
- Springboot使用bean方式详解(附代码)
- SSO单点登录、跨域重定向、跨域设置Cookie、京东单点登录实例分析
- mongodb修改数据语句_mongodb之一些简单的增删改查语句
- 零基础学Python-爬虫-5、下载音频
- mysql 自动热备份_mysql(mariadb)定时自动热备份+增量+远程备份脚本
- 开源]OSharpNS 步步为营系列 - 1. 业务模块设计
- C++单例模式简单实现
- java中menu用法_Android Menu用法全面讲解
- 现代计算机主要有哪些方面的应用,现代汉字主要应用于哪些方面;汉字的整理有哪些内容?...
- c语言对excel进行分类,六ABC分类法的Excel实现.doc
- kubeedge集群搭建
- cad 打开硬件加速卡_Win10系统运行CAD不流畅解决方法
- 零基础HTML入门教程(14)--水平线
- Autoware 1.14(WSL2) 与LG SVL Simulator(Win11)联合仿真
- 洛谷P1359租用游艇
- 【转】国内人才《上海市居住证》续办需提供的申请材料
- 路由概述与静态路由、默认路由、浮动路由基本配置
- 一文看懂大功率(PD3.1 240W)线缆的过温保护解决方案
- 测试显卡的软件叫游戏什么,显卡测试软件哪个好