
如何更改CTFramesetter框架中文本的垂直对齐方式?我希望我的文字在中间,而不是在顶部.我正在使用Core Text框架.该段落的设置可以更改水平对齐但不是垂直对齐.
我需要将居中文本绘制到CGContext.
我开始使用Cocoa方法.我用文本创建了一个NSCell并尝试绘制它:
NSGraphicsContext* newCtx = [NSGraphicsContext
graphicsContextWithGraphicsPort:bitmapContext flipped:true];
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:newCtx];
[pCell setFont:font];
[pCell drawWithFrame:rect inView:nil];
[NSGraphicsContext restoreGraphicsState];
Run Code Online (Sandbox Code Playgroud)
但是CGBitmapContext似乎没有在其上呈现文本.可能是因为我必须为inView:参数传递nil.
所以我尝试将文本渲染切换到Core Graphics:
最简单的方法似乎是使用CGContextSelectFont来使用其postscript名称和点大小来选择字体,但CGContextShowTextAtPoint只接受非unicode字符,并且没有明显的方法将文本拟合到矩形:或计算范围一行文本来手动布局矩形.
然后,有一个可以创建的CGFont,并设置cia CGContextSetFont.绘制此文本需要CGContextShowGlyphsAtPoint,但CGContext似乎缺少计算生成文本的边界矩形或将文本换行到rect的函数.另外,如何将字符串转换为CGGlyphs数组并不明显.
下一个选项是尝试使用CoreText来呈现字符串.但Core Text类非常复杂,虽然有一些示例显示如何以指定的字体,在rect中显示文本,但没有示例演示如何计算CoreText字符串的边界矩形.
所以:
这可能也会被问为"kCTKernAttributeName是用词不当吗?"
我需要更改iOS中某些文字的字母间距/跟踪.(我使用的字体在小尺寸上有点过于紧张.)有一些核心图形例程会改变字符间距,但这些例程不能处理Unicode.还有其他核心图形例程,这些例程是根据字形定义的,但这些例程似乎是一个受伤的世界,除此之外,还没有恢复到我的字体中不存在的字形的系统字体的安全网.
所以核心文本似乎是这样做的方式,核心文本支持CFAttributedString上的kCTKernAttributeName.我认为这会做我想要的,虽然这实际上不是字距调整,因为字距调整通常是一个字符对属性,而且(似乎来自文档)只是对所有字形的字形前进进行统一调整,即,跟踪.
如果有人知道在我转向核心文本API的相当痛苦的道路之前......
我正在使用TTTAttributedLabel(使用CoreText)而不是UILabel来加粗某些部分.它工作得很好,但文字看起来不一样.它看起来像是使用不同的字体.我把它设置为相同的字体(Helvetica),但一个是CTFont,一个是UIFont.为什么他们看起来不一样?
UIFontUILabel的:[UIFont systemFontOfSize:15]CTFont针对CoreText的:CTFontCreateWithName((__bridge CFStringRef)[UIFont systemFontOfSize:15].fontName, 15, NULL)UILabel截图:

CoreText屏幕截图:

"散步"中的"p"和"o"是最容易看到字体看起来不一样的部分.CoreText版本中的字母更圆.
我听说我可以使用CoreText显示NSAttributedString,谁能说我怎么样(最简单的方法)?
请不要使用CATextLayer或OHAttributedLabel回答.
我知道在这个论坛上有很多关于这方面的问题,但我找不到答案
谢谢!!
我有2个属性字符串说'A'和'.'
我需要计算每个字符串的高度.目前返回的高度对于两者都是相同的,它似乎返回给定字体中最高字符的最大可能高度(即使字符串中不存在该字符).
我想得到每个这些字符的确切像素高度,这样我就可以调整它们周围的视图,使其符合角色(字形).我尝试过使用CTFramesetterSuggestFrameSizeWithConstraints()和CTLineGetTypographicBounds(),但它返回一个类似于属性字符串大小方法的数字.
非常感谢有关如何做到这一点的任何提示!
我想略微修改一个角色的y位置NSAttributedString.我知道我可以使用属性字典下标(或上标):
@{(id)kCTSuperscriptAttributeName: @(-1)}
Run Code Online (Sandbox Code Playgroud)
不幸的是,由此引起的转变在我的情况下太大了.我正在寻找一个以1点为单位调整基线的选项.
属性字符串将显示在UIButton使用中-setAttributedTitle:forState:.
我在运行时加载ttf字体并使用CoreText注册它们.稍后,当字体更新时,我从CoreText取消注册字体,从服务器下载最新版本并再次使用CoreText注册字体.
这几乎可以工作,但看起来字体是缓存的,直到我的应用程序终止并重新启动才更新.
取消注册字体并从任何缓存中删除它的正确方法是什么?
我使用此代码取消注册字体:
NSURL *url = /* My url to the font */;
CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef) url);
CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider);
CGDataProviderRelease(fontDataProvider);
CFErrorRef error = nil;
CTFontManagerUnregisterGraphicsFont(newFont, &error);
CGFontRelease(newFont);
if (error) {
NSLog(@"Error unregistering font: %@", error);
}
return newFontName;
Run Code Online (Sandbox Code Playgroud)
我觉得有一件事是错的,但不知道如何解决,我是如何得到的CGFontRef.是否CGFontCreateWithDataProvider每次都创建新的引用,或者CGFontRef如果它已存在,我是否已获得已注册的引用?有没有更好的方法来获得CGFontRef已经注册的字体?
我只使用字体来创建动态UIImage实例,所以我认为没有任何标签或其他UI元素保持对字体的引用.
谢谢你的帮助!
我正试图在左边有一个带有图像和标题的UIlabel,在右边有一个带有项目符号的描述列表,为此我正在使用NSAttributedString,如下所示:
NSMutableParagraphStyle *pStyle = [[NSMutableParagraphStyle alloc] init];
pStyle.tabStops =
@[ [[NSTextTab alloc] initWithTextAlignment:NSTextAlignmentLeft location:tabLocation options:[NSDictionary dictionary]] ];
NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] init];
NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init];
textAttachment.image = [UIImage imageNamed:@"test_image"];
textAttachment.bounds = CGRectMake(0, -3, 15, 15);//resize the image
attString = [NSAttributedString attributedStringWithAttachment:textAttachment].mutableCopy;
[attString appendAttributedString:[[NSAttributedString alloc]
initWithString:[NSString stringWithFormat:@"title\t\u2022 %@",
[@[ @"description1", @"description2" ]
componentsJoinedByString:@"\n\t\u2022 "]]
attributes:@{NSParagraphStyleAttributeName : pStyle}]];
label.attributedText = attString;
Run Code Online (Sandbox Code Playgroud)
我希望右边的列表保持对齐但事实并非如此,这是我得到的结果:
我想设计如下:
我正在使用core text绘制一个multicolumn,我可以显示它,这不是问题,需要将图像显示为静态图像,前三列需要显示,第四列将通过滚动显示水平.
1.需要添加超级链接到视频网址.
2.需要像上面这样的设计..
示例尝试了两种方式: https ://github.com/karthisiva/CoreTextWithImage
内容将是html文本.