#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 = &paragraph;

//创建样式数组

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 = &paragraph;

//创建样式数组

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 轻松设置字体大小,间距,行间距,段间距,算高度...相关推荐

  1. clion调整字体打下奥_Clion、IEDA、pycharm的一些简单设置步骤(设置中文菜单、输出中文、字体大小、背景颜色主题)...

    Clion.IEDA.pycharm的设置及界面是一模一样的,下面我将按照Clion举例,但是在IEDA和pycharm是同样适用,按照方法设置即可 一.中文界面 clion.ieda.pycharm ...

  2. CoreText 轻松设置字体大小,间距,行间距,段间距,算高度

    [http://blog.sina.com.cn/s/blog_691a202f0101bq6q.html] 下面主要讲,如何设置字体,间距,并计算(带特定段间距,行间距,字间距,字大小)文字的高度. ...

  3. 相机参数设置程序_自定义拍摄模式怎么设置?教你学会相机设置。

    相机的模式转盘上,除了基本的全自动.程序自动.光圈/快门优先.手动.B门等拍摄模式,还有自定义拍摄模式,对于拍摄有哪些作用?该如何设置自定义拍摄模式呢? 一.自定义拍摄模式的作用 自定义拍摄模式,可以 ...

  4. burp爆破线程设置多少_多线程到底需要设置多少个线程?

    我们在使用线程池的时候,会有两个疑问点: 线程池的线程数量设置过多会导致线程竞争激烈 如果线程数量设置过少的话,还会导致系统无法充分利用计算机资源 那么如何设置才不会影响系统性能呢?其实线程池的设置是 ...

  5. Latex 中设置 表格字体大小,行间距 等

    Latex设置表格字体大小格式为: \begin{table}[h] \small %此处写字体大小控制命令 \begin{tabular} \end{tabular}\end{table} Late ...

  6. Mysql时区设置最佳实践,mysql设置时区_修改MySQL时区设置的方法

    摘要 腾兴网为您分享:修改MySQL时区设置的方法,一直播,一点开,小猿口算,汤圆等软件知识,以及都优乐,daysmatter,乐学高考app,随缘漂流瓶,虚拟软件,平安知鸟,智能证件照app,新概念 ...

  7. 广告牌定时器怎么设置时间_定时开关如何设置时间呢

    路灯定时开关怎么设置定时 内容如下:1.先按取消键5秒就可解锁设置2.如果有设置,先选择,然后选择校时,校分,这个是开:3.再次按设置,校时,校分,第一组就设置完成.以此类推下去就行.4.选择自动,或 ...

  8. 【java基础知识】设置表格内容居中显示,表格字体大小调整,表格列宽调整

    一.表格内容居中显示 通过Netbeans创建表格后,默认表头和表格内容全部偏左显示,想要手动修改,需要先将自动创建的表格类改为public类型. 然后在表格代码部分后面添加下面代码: 1.表头居中显 ...

  9. html 字号 宽度 像素,JS根据设备宽度设置根节点(html)font-size字体大小

    JS根据设备宽度设置根节点(html)font-size字体大小 发布时间:2020-04-10 20:28:04 来源:51CTO 阅读:3210 作者:pmlinjian JS根据设备宽度设置根节 ...

最新文章

  1. Svn 笔记—— Hooks
  2. java中的多态_Java中的多态
  3. 第11章 PADS功能使用技巧(2)-最全面
  4. hashmap containsvalue时间复杂度_面试宝典:数据结构HashMap
  5. 10套华丽的 Windows 8 Metro 风格图标【2000+免费图标】
  6. 对实体 useSSL 的引用必须以 ';' 分隔符结尾。
  7. 最新 Linux安装项目环境 mysql 完整教程 100%可行.附带所有教程
  8. 构造数列中的常见变形总结【中阶和高阶辅导】
  9. 【GBK、UTF-8、ISO8859-1】三种编码方式总结及实例
  10. SLAM和SFM有什么区别?
  11. 阿里云服务器:配置 Docker 的 镜像加速器
  12. linux找不到无线网卡么,找不到无线网卡解决办法
  13. 大力普及“他妈的”有助于语言交流
  14. 第8届泰迪杯C题问题总结
  15. 【实战】PyTorch 在 CIFAR-10 数据集上的训练及测试过程
  16. Java知识点整理(SE) IO
  17. Fusion App2.0将网页转app,最简教程
  18. python基本语法整理
  19. C# 是否读到文件尾, 怎么判断
  20. 《例学Symbian手机开发》已由铁道出版社出版

热门文章

  1. win7计算机电源设置在哪里设置,windows7电源管理设置在哪里_win7的电源管理在哪里打开-win7之家...
  2. Spring Boot中DAO层和Service层等理解
  3. 机器学习基础 线性回归及一些基础概念(正则化、过拟合、欠拟合等)
  4. 苹果手机投影_苹果12pro有没有指纹解锁 带屏下指纹解锁具体说明
  5. 小白自学PIX飞控学习笔记
  6. 耐克推出多款Apple Watch表带 与其运动鞋相得益彰
  7. 三种客观赋权法——熵权法、变异系数法、CRITIC
  8. 【英语面试】四.计算机专业英语面试常见问题(优缺点/观点/观念篇)
  9. CAD如何打印图纸啊,一个里面有好几张图纸,如何打印在A4纸上啊
  10. linux重命名文件_Linux重命名多个文件扩展名