问题标签 [nstextcontainer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 在启用换行模式的情况下,在 NSLayoutManager 中获取正确的字形点
我正在尝试在以下位置获取所选字符的实际点NSTextContainer
:
它可以正常工作,直到第一个换行符由
每个连字符将索引移动一个点并glyphIndexForPoint
得到错误的索引。如何在启用换行模式的情况下获得正确的索引?
ios - 多个 NSTextContainers 不能与 UIPageViewController 一起正常工作
我有一个长文本(多个屏幕页面)存储在 NSTextStorage 中。我实例化一个 NSLayoutManager() 并将 textStorage 添加到它。然后我继续添加特定大小的 NSTextContainers,直到我用完整个文本。容器也被添加到数组中。这个想法是只计算一次,所以我以后只能使用容器(页面)。
这都是模型类的一部分,在 UIPageViewController 中实例化。UIPageViewController 呈现仅包含 UITextView 并具有对模型的引用的 ViewController。UITextView 使用上述数组中的 NSTextContainer 进行实例化。
这一切都很好,问题是,它只工作一次。一旦我“翻”一页,另一页是空白的。当我在横向时,我得到两个 ViewController,它们都正确加载。同样,一旦我翻页,textView 是空的。
当我每次翻页时创建新的 NSTextStorage、NSLayoutManager 和 NSTextContainers 时,它都能完美运行,但是,这非常缓慢且效率低下。
知道可能是什么原因吗?
编辑:
这是在 UIPageViewController 创建的页面上创建 textView:
这是在 UIPageViewController 实例化的模型中,由上面的代码调用:
ios - 如何从 UITextView 中删除垂直线并从 DLinedTextView 的左侧输入文本?
我正在使用DALinedTextView
衬里UITextView
。我想删除红色垂直线并从左侧输入文本。我怎样才能做到这一点。提前致谢。
ios - NSLineBreakByTruncatingTail on UITextView removing new line breaks
I have a UITextView with attributedText that has multiple new line breaks included in its attributed string.
I've set the lineBreakMode of the textView's textContainer to NSLineBreakByTruncatingTail.
The textView's textContainer also has a maximum number of lines.
The problem arises when the 8th line of the textView is a new line, and not a line of characters. The textContainer truncates by removing the new line and replacing it with the next line of written characters.
How do I preserve the new line while still setting a lineBreakMode?
macos - NSLayoutManager/NSTextContainer 忽略比例因子
我正在尝试NSAttributedString
使用以下方法在给定宽度的情况下测量 的高度:
基本上,宽度是表格视图的大小减去滚动条和用于显示其他信息的每个单元格的一点点。只要文本比例 (via convertSliderValueToFontScale:
) 为 1.0,此方法就非常有效。但是,如果我更改比例因子,则结果usedRectForTextContainer
不正确 - 好像没有考虑比例因子。
比例setScaleFactor:forTextView:
在 NSTextView 上设置如下(标量是实际的比例量):
有想法该怎么解决这个吗?
编辑:我有一个示例项目可以在这里尝试:Github。奇怪的是,如果比例 < 0,事情就会起作用,而且它们有时似乎随机地在 4.XXX 范围内工作......
ios - NSLayoutManager 的基线对齐问题
我正在开发一个UIView
使用多个单独NSLayoutManager
对象呈现文本的自定义。(此视图的文本定位要求超出了内置文本视图类可以支持的范围。)当布局的文本是希伯来语时,我很难为其中一种布局获得正确的垂直位置。对于这篇文章的篇幅,我深表歉意,但我想包含尽可能多的相关细节。
问题
这是我要完成的示例:
“2”的基线与希伯来字母“ו”(以自定义字体呈现)的基线很好地对齐。但是,如果我将“2”的文本切换为希伯来数字(实际上是希伯来字母“ב”,在数字上下文中的值为 2),结果如下(“ב”太高):
这里唯一的变化是文本字符串。而不是"2"
,它是"\u{05b1}"
。我希望一切都在一个共同的基线上,并希望有任何解决问题的建议(这适用于所有希伯来数字,而不仅仅是"\u{05b1}"
)。
编码
(我应该提到,出于技术原因,我不能NSLayoutManager
对数字和正文都使用一个。)我试图通过垂直移动数字的渲染位置通过字体上升的差异来对齐基线。这是计算班次的代码:
这是我NSLayoutManager
为数字创建的方式:
后来,我使用以下方法渲染文本:
正文使用相同的逻辑处理,但没有offset
(当然还有不同的字体)。这对于阿拉伯数字(例如,“2”)非常有效,但对于希伯来数字(例如,“ב”)则无效。
更多信息
对于上面的图像,字体大小 ( .pointSize
) 和 ascent ( .ascender
) 属性是:
尺寸:文本 = 14.3890409469604;数字 = 8.63342465753425
上升:文本 = 16.159567469731;数字 = 8.2203017979452
我还生成了一些关于布局的诊断信息,但这些数字对我来说没有多大意义。这是打印信息的代码:
以下是两个文本(“2”和“\u{05d1}”)的结果:
label: 2
text size: (5.3958904109589, 10.3027782534247)
bounds: (0.0, 0.0, 5.3958904109589, 10.3027782534247)
label: ב
text size: (4.67931616438356, 9.19459726027397)
bounds: (-1.88208657534247, -0.578439452054793, 9.5054005479452, 9.77303671232876)
关于这个让我感到困惑的几件事:
- 希伯来文文本的边界从 x 和 y 的负值开始。负的 x 起源可能与希伯来语是从右到左的脚本有关,但是负的 y 起源呢?
- 报告的布局大小是边界高度和边界的 y 起点或(也许更准确地说)容器中文本的底部的代数和,而不是实际的整体大小。
NSAttributedString.size()
坏了吗? - 这些数字似乎都无法解释“2”和“\u{05d1}”在垂直位置上的视觉差异。
ios - 在出队的单元格 UITextView 上更新属性文本使应用程序冻结
我现在被困在一堵大墙上...
我正在使用UITableViewCell
包含UITextView
自定义NSTextAttachment
图像的自定义。
每个都NSTextAttachment
覆盖
和
从NSTextAttachmentContainer
协议。
这里的目标是显示不同大小的图像,并使边界适应可用空间。
我还需要sizeThatFits
在缓存之前使用专用单元格上的语句计算单元格高度。
直到今天,当我尝试列出特定系列的内容时,一切都运行良好。
当将旧单元格出列以显示全新单元格时,我的应用程序只是冻结在[_textView setAttributedString:myAttributedText];
语句中([NSATSTypesetter beginLineWithGlyphAtIndex:]
在堆栈中)。
我只是想尽一切办法避免每次都徒劳地重新创建细胞(这实际上是有效的)。
这是我发现的:
- 即使我“硬编码”返回单元格高度值,问题仍然存在。
- 更改
NSTextAttachment
边界(并保持单元格高度)似乎使错误消失而没有任何逻辑...... - 这显然是内容的恶魔组合,因为如果我更改单元格高度以使出队稍后发生,一切正常。实际上,所涉及的两个单元格都包含仅包含一个图像的文本。
- 我查看了
- (void)prepareForReuse
方法并试图重置UITextView
状态,同样徒劳无功。 UITextView
每次出队时重新创建一个全新的单元格似乎可以解决问题。
任何想法?我需要了解一些关于出队系统或NSTextAttachmentContainer
协议的基本信息吗?
提前谢谢了。
编辑: 我发现解决此问题的唯一方法是:
声明在sizeToFit
这里真的很重要!
objective-c - UITextView 不完全适合 NSTextContainer
我刚刚使用堆栈创建了一个自定义方法,但对大小和帧大小TextKit
之间的差异感到困惑。文本有一个白色边框,我想知道如何摆脱它(见更新)。最后一个字符之后的区域也是白色的。我已经设置了一个属性来使用与字符串长度匹配的范围,但到目前为止我还没有找到一种方法将此属性应用于整个区域。NSTextContainer
NSTextView
backgroundColor
我尝试了各种设置组合NSTextContainer
和UITextView
. 以下语句最接近所需结果,但白色边框仍然存在。
我在这里和这里完成了教程,并在这里TextKit
和这里搜索了 Apple 文档。我还检查了最接近的问题,是的,我有 appDelegate
更新
此处的答案已消除白色边框(感谢Larme)
textView
在方法的末尾添加了以下语句
如果相关,该应用程序是在 iOS 4 中启动的。它现在使用 Xcode 版本 9.2 运行 iOS 11。它已经使用textView
并且TextKit
现在正在考虑(不情愿地)作为解决来自应用程序测试人员的许多请求的一种方式。因此,任何可能有助于解释和解决此问题的指针都将受到欢迎。
感谢期待。
这是该方法的代码。helpMessage
从数组中读取(未显示)。