首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在TextKit中使字形无效

在TextKit中使字形无效
EN

Stack Overflow用户
提问于 2013-11-08 18:51:24
回答 1查看 919关注 0票数 1

我试图实现文本折叠效果,根据文本存储中的属性隐藏UITextView中的一些文本,然后在layoutManager: shouldGenerateGlyphs: properties: characterIndexes: font:(UIFont *)aFont forGlyphRange:(NSRange)glyphRange方法中将这些字形属性设置为NSGlyphPropertyNull。到目前为止,这部分发挥的很好,并且达到了预期的效果。问题是当我试图强制文本视图的布局管理器重新布局文本时。我尝试过调用所有的无效方法,但只有一个有效,invalidateGlyphsForCharacterRange: changeInLength: actualCharacterRange:。我传递了整个字符范围,0表示changeInLength,因为我实际上没有更改任何内容,而对于actualCharacterRange,则为NULL。每隔一段时间,这件事就会很好。但大多数时候我都会犯这个错误,Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The index -4097 is invalid'。这是怎么回事?下面是我的一些代码:

代码语言:javascript
复制
-(IBAction)showHideNotes:(id)sender {
    self.hideNotes = !self.hideNotes;
    [self.textView.layoutManager invalidateGlyphsForCharacterRange:NSMakeRange(0, _textStorage.string.length) changeInLength:0 actualCharacterRange:NULL];
    [self.textView setNeedsLayout];
}

基本上,我的目标是,当用户点击按钮时,文本要么折叠,要么展开。在UILayoutManagerDelegate方法layoutManager: shouldGenerateGlyphs: properties: characterIndexes: font: forGlyphRange:中,只有当self.hiddenYES时,我才将希望隐藏的符号设置为NSGlyphPropertyNull

EN

回答 1

Stack Overflow用户

发布于 2013-11-08 19:06:52

检查文档中的invalidateGlyphsForCharacterRange:changeInLength:actualCharacterRange:

此方法仅使字形信息无效,并且不执行字形生成或布局。由于使象形文字无效也使布局无效,所以调用此方法后的invalidateLayoutForCharacterRange:actualCharacterRange:,也应该调用传递charRange的charRange作为第一个参数.。

此外,请确保您正在遵守此方法的其他文档限制:

布局机制使用此方法,只应在排版期间调用此方法,在几乎所有情况下,只应由布局管理器调用。例如,自定义布局管理器可能会调用它。

当您说要设置符号时,是否意味着在委托方法中调用setGlyphs:properties:characterIndexes:font:forGlyphRange:?这样做就足以使字形无效。(“对以前计算过的布局信息使布局和显示无效的字符范围调用此方法”)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19866450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档