我必须使用所有类型的文本对齐绘制带下划线的多行文本.我在论坛上搜索过并获得了一些结果:
http://davidjhinson.wordpress.com/2009/11/26/underline-text-on-the-iphone/
http://forums.macrumors.com/showthread.php?t=561572
但是所有人都只为单行绘制文字.虽然我有多行文字.当文本对齐居中时,情况甚至变得更糟.我搜索并发现在iphone-sdk-3.2中有一些核心文本属性用于加下划线,但不知道如何使用它.此外,如果我使用这些,我的问题将无法完全解决.
因为我还要画出删除线文字.
有任何想法的人请帮忙.
我正在寻找有关实现视图的指导,该视图NSAttributedString在带有孔的多边形内呈现,包裹和回流文本以适合几何.这不是CoreText问题,而是将不规则形状划分为有序蹲下矩形序列的一般问题.
类似的问题尚未得到充分回答:
如何在Javascript中用文本填充形状
CoreText CTFramesetter不支持渲染成CGPath
CoreText处理与文本布局和显示相关的令人难以置信的大量工作,所以我不禁怀疑我正在重新发明一个轮子.出于这个问题的目的,请假设我可以检查适合给定矩形的子字符串,同时考虑自动换行和连字符.
编辑:我已经决定只扫描从左到右的绘图,尽可能多地适应边界.虽然我打破了自然界限,但看起来有点随意,所以我仍然很欣赏其他应用程序如何包装文本的指导.
编辑#2:它现在看起来很不错,它支持基本的自动换行并避免渲染很短的行.我的问题一定太模糊了.谢谢你的期待.
编辑#3: Amorya指出CTFramesetter现在接受任何CGPath.
我有一个UIView的子类,它实现了绘制CoreText的代码.在应用程序中,UIView是在UIScrollView中绘制的.这是我目前在drawRect中使用的代码:渲染NSAttributedString:
CGContextRef context = UIGraphicsGetCurrentContext();
float viewHeight = self.bounds.size.height;
CGContextTranslateCTM(context, 0, viewHeight);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextSetTextMatrix(context, CGAffineTransformMakeScale(1.0, 1.0));
CGMutablePathRef path = CGPathCreateMutable();
CGRect bounds = CGRectMake(PADDING_LEFT, -PADDING_TOP, self.bounds.size.width-20.0, self.bounds.size.height);
CGPathAddRect(path, NULL, bounds);
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFMutableAttributedStringRef)attrString);
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);
CFRelease(framesetter);
CFRelease(path);
CTFrameDraw(frame, context);
Run Code Online (Sandbox Code Playgroud)
在我的NSAttributedString中,我有一些文本属性来为文本着色.
我需要帮助的是概念上,应该如何实现?我对所有绘制框架,图层等的各种方法感到困惑.我试图查看几本书和其他资源,但我觉得我缺少一些基本的东西.
这是我的要求:
我非常感谢任何帮助.
这是我到目前为止所尝试的:
我添加了一个新的UIView作为UIScrollView的子视图以包含亮点.然后我为突出显示添加单独的UIViews.当我创建虚拟"测试"高亮显示时,它们在CoreText视图下正确显示.我也可以轻松改变高光颜色.但是,当我从CoreText视图获取有关线条的实际信息以创建真实高光时,它返回零线.这可能是因为drawRect还没有完成绘图还是其他什么?
以下是一些问题:
我见过这个开源项目:
https://github.com/Cocoanetics/NSAttributedString-Additions-for-HTML
这是它能做的惊人,但比我需要的要复杂得多.代码使用CoreText呈现每个单独的字形,并允许突出显示,这很棒.但是,我试图保持我的代码简单和轻量级.我对CoreGraphics,CoreAnimation或CoreText知之甚少.
我也看到过这个问题:
该问题的答案提供了确定给定行中给定范围的Rect的边界的调用.我想我可以搞清楚这些电话.
UPDATE
这就是我现在所做的.我确定这是错的,但这是我能找到的唯一方法让它发挥作用......
当使用 - [NSString drawInRect:withAttributes:]时,主要是在使用内置的Helvetica Neue以及其他字体时,字距调整非常糟糕.但是,当在Text Edit(使用NSTextView)中呈现相同的字符串时,字距调整很棒.考虑这两个字符串:


对于小点大小,第一种情况(在Cocoa中呈现)几乎难以辨认,而第二种情况(来自文本编辑)要好得多.我认为这里根本没有使用字距调整信息.如果我应用值为0.0的NSKernAttribute(根据文档关闭字距调整),我得到相同的结果,顶部的那个.
我也尝试过使用带有CTLineDraw的Core Text,但仍然有很糟糕的字距.所以我的问题是,在Cocoa文本系统中启用字距调整是否需要做些什么?如果没有,NSTextView如何应用字距调整?
我正在尝试在(半)透明背景上使用CoreText(appkit版本)进行渲染,因此边缘不平滑.
在网上搜索表明没有解决这个问题的方法,但是我不相信它,因为一个简单的观察:如果我创建一个包含相同字符串的CATextLayer,那么字体是可爱和流畅的.
我已经尝试将各种"允许"设置设置为true,然后完成它们提供的16种可能性.有些人比其他人好,这是我到目前为止所做的:
CGContextSetAllowsAntialiasing(context, YES);
CGContextSetAllowsFontSmoothing(context, YES);
CGContextSetAllowsFontSubpixelPositioning(context, YES);
CGContextSetAllowsFontSubpixelQuantization(context, YES);
CGContextSetShouldAntialias(context, YES);
CGContextSetShouldSmoothFonts(context, NO);
CGContextSetShouldSubpixelPositionFonts(context, YES);
CGContextSetShouldSubpixelQuantizeFonts(context, YES);
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何获得CATextLayer获得的相同结果吗?
我想知道字符串在rect中绘制后将是什么帧.
NSString *string = @"This is a sample text.";
UILabel *label = [[UILabel alloc] init];
label.text = string;
// do some setups here
Run Code Online (Sandbox Code Playgroud)
在drawInRect:方法中,我想检索特定单词的框架.假设我想知道sample来自This is a sample text.字符串的矩形.
这是一个示例UILabel,我想知道红框内文本的框架.谢谢!

我正在使用折旧的ShowTextAtPoint方法更新iOS 7的应用程序,似乎无法找到使用CoreText而不是ShowTextAtPoint的正确方法.
我试图实现DTCoreText.我按照本指南并将其实现为git submodul,但现在我在尝试运行我的应用程序时遇到错误.在片刻,我没有使用DTCoreText进行任何编码.我只是想测试我的应用程序是否适用于新导入的数据......但它没有!
我收到一个警告:
Static Library was rejected as an implicit dependency for 'libDTCoreText.a' because its architectures 'armv7s' didn't contain all required architectures 'armv7'
Run Code Online (Sandbox Code Playgroud)
在我看来,警告后出现以下错误的原因:
Apple Mach-O Linker Error: no such file or directory: '/Users/-------------/Build/Products/Debug-iphoneos/libDTCoreText.a'
Run Code Online (Sandbox Code Playgroud)
我没有忘记在" Link Binary With Libraries "中实现libDTCoreText.a ,但它总是红色的?这可能是问题吗?
我正在创建一种自然语言形式,每当用户输入相当大的输入时,我希望整行都移动到下一行(就像一个UITextView).现在,我得到了这个结果:
这表明存在两个明显的问题:一个:UITextField正在推动的元素应该转到下一行,其次,当向后间隔时,被"推开"的元素不会被"推回"到位.此外,UITextField退出时应该移动到下一行view.bounds.是否最好使用a UITextField或UITextViewfor 是任意的.它应该适用于图2中的情况.
这是我想要实现的更具图形化的方法: 
我该如何解决这个问题?这是正确的方法吗?
罗伯特的答案是非常好的,除了它仍然存在的一些错误之外还有一个问题,即它不灵活.我已经开始重构代码并尝试按照Robert的方法对a UITextField和a 进行子类化UITextView.
当继承代码,需要有一些代表团的UITextField到UITextView.其次,句子的每个部分都需要UITextField在中间存在时进行分割,但我觉得这也可以硬编码到VC中.约束也需要转换为代码.
每当我得到所有这些问题中的任何一个的解决方案时,我都会更新问题并希望获得灵活的解决方案:)
我有一个NSAttributedString"表"使用NSTextTab停止,其中第一列是KEY,第二列是值
像这样:
| **KEY 1**|value1|
|**KEY TWO**|value2|
Run Code Online (Sandbox Code Playgroud)
KEYS的字体大小/重量不同+全部大写.行对齐,以便所有字母的底部匹配.我想垂直微调这些值,使它们看起来与KEYS垂直居中.
有没有办法做到这一点?这似乎非常专业,但从设计的角度来看,我认为它看起来会更好
objective-c nsattributedstring core-text ios nsparagraphstyle
core-text ×10
ios ×4
objective-c ×4
cocoa ×2
iphone ×2
algorithm ×1
appkit ×1
c# ×1
cgcontext ×1
cocoa-touch ×1
dtcoretext ×1
geometry ×1
ipad ×1
nsstring ×1
text ×1
textkit ×1
uilabel ×1
uiscrollview ×1
uitextfield ×1
word-wrap ×1
xamarin ×1
xamarin.ios ×1