问题标签 [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.

0 投票
2 回答
1026 浏览

ios - NSTextContainer excludePaths 冻结应用程序并在 iOS 7.1 上使用 99% 的 CPU - 解决方法?

我正在尝试使用 NSTextContainer 的 excludePaths 排除 UITextView 中的正方形,如下所示:

这在 iOS 7.0 中运行良好:

使用 iOS 7.0

然而,在 iOS 7.1 中,这将导致lineFragmentRectForProposedRect:atIndex:writingDirection:remainingRect:NSTextContainer 某处出现无限循环,占用 99% 的 CPU 并疯狂地泄漏内存。该应用程序完全没有响应,最终由于内存使用而终止。显然这是 iOS 7.1 中的一个错误。

当我将排除矩形的 x 原点仅更改一个点(原点为 {1,0})时,它可以工作,但看起来很糟糕:

使用 iOS 7.1 并向右一点

该错误似乎仅在第一行的第一个字符受排除矩形影响时才会发生。当我将排除矩形更改为 {0,30} 时,它也可以工作:

iOS 7.1 和 0,30

但显然这不是我想要的。有谁知道我可以如何解决这个错误?

0 投票
0 回答
572 浏览

macos - 如何手动告诉 NSTextContainer 重新计算 lineFragmentRects?

在我的应用程序中,我一直在添加对 NSTextView 的支持,允许子视图自然地与文本编辑器一起工作。(例如,按“回车”会降低低于插入点的每个子视图,并且文本会环绕子视图。)

我已经成功地通过覆盖来获得子视图的自动换行lineFragmentRectForProposedRect(proposedRect: NSRect, sweepDirection: NSLineSweepDirection, movementDirection: NSLineMovementDirection, remainingRect: NSRectPointer) -> NSRect

但是,当拖动子视图或调整大小时,需要重新计算文本中的中断以获得所需的效果。文本需要在拖动或调整大小时自行更新以环绕子视图。但是,我注意到在一行上键入会更新该行的 lineFragmentRect。有没有办法在拖动子视图后立即将文本标记为“脏”?这是文本容器子类的代码:

0 投票
2 回答
1149 浏览

uitextview - 将多个 NSTextContainers 添加到 NSLayoutManager

我注意到您可以使用选择器将多个文本容器添加到 Objective-C 中的布局管理addTextContainer:(NSTextContainer *)textContainer器。使用 TextKit,我只需要添加一个文本容器,当使用多个文本容器时,所有的 textviews 都会从链接到布局管理器的文本存储中填充相同的文本。我只是好奇,但我什么时候需要将多个文本容器添加到一个布局管理器?

0 投票
2 回答
1008 浏览

ios - 如何将自定义贝塞尔路径应用于 UITableViewCell 内的 UITextView

我正在使用 UITableViewCell。该单元格包含许多图像、一个标签和一个 UITextView。我希望 UITextView 与其他视图一起绘制作为其排除路径。所以在我的 MyUITableViewCell 类中,我在方法中有以下代码awakeFromNib

这些编辑似乎都没有生效。

BWT:我在 UITableView 内的故事板中声明了 TableViewCell。然后我将情节提要单元链接到 MyUITableViewCell,然后从那里开始。澄清一下:一切正常;除了现在我要自定义 textContainer。

- 更新 -

我认为我的代码示例显示了我想要做的事情,这里还有一些解释:

  • 我希望 textview 在所有方面都与 TableViewCell 连续。由于我无法在情节提要中完成此操作,因此我在代码中添加了以下行:self.animalBioTextView.bounds=self.bounds

  • 由于 textview 与单元格连续,那么我应该能够“轻松”使用子视图的边界并将它们传递给 textView。但显然,界限是关于孩子们自己的。那么如何获得相对于 UITableViewCell 的坐标呢?在我的情况下是self

0 投票
1 回答
1353 浏览

ios - 使用 NSLayoutManager 计算文本大小

我正在开发一个视图,它使用 TextKit 框架来排版这样的列中的文本: 列文本布局

我使用UIView带有边缘插图(黑色矩形)的边界来计算 10 CGRects,然后将其转换为NSTextContainers(红色矩形)。在drawRect:我将这些传递给NSLayoutManagerwhich 为我排版和绘制字形。

我的问题是:如何计算所需的列数?我可以绘制恒定数量的列,但文本长度不同,我需要以编程方式调整列数。

[NSLayoutManager glyphRangeForTextContainer:]当文本容器为空时,我找到了返回长度范围为 0 的方法。因此,我可以循环创建文本容器并使用此方法来确定是否需要更多容器。但是,据说这种方法效率低下,因为它会触发布局计算,而且我不乐意将它循环运行数百次。

一定有更好的方法!

谢谢你的回答,皮特。

0 投票
2 回答
2589 浏览

ios7 - 是什么导致 iOS 8 中带有 UITextView 的不需要的内容插入(iOS 7 中没有)?

我一直在UITextView以编程方式创建 s,在 iOS 7 中使用自动布局。像这样:

除了我创建的其他约束之外,我在文本视图的底部还有一个:

这样我就可以在键盘显示时更改约束:

这一切都很好......

问题

我刚刚切换到 Xcode 6 和 iOS 8(我知道晚了) -UITextView现在里面的文本在顶部有一个插图。例如(文本视图背景为黄色):

在此处输入图像描述

是什么导致了插入?它与NSTextContainer和相连textContainerInset吗?

  • 从 iOS 7 及更高版本开始使用NSTextContainer正确textContainerInset的使用方式?UITextView
  • 在 iOS 8 中是否必须这样做?

如果是的话,我将不胜感激以编程方式创建 aUITextView以及必要的NSTextContainerand的一些指导NSLayoutManager;然后设置textContainerInset. (我将以编程方式使用自动布局)。

谢谢。

0 投票
1 回答
575 浏览

ios - 在 NSTextContainer 中获取文本

我有一个带有 NSString 内容的 NSOrderedSet 段落。遍历所有内容,创建一个大字符串并赋予 NSTextStorage。但是所有的段落都丢失了。

下面的代码允许我计算页面并在页面中显示内容。但我想将内容分成段落并知道用户何时点击特定段落。

如何使用 NSTextStorage 将内容不显示为单个大字符串,而是显示为一组较小的文本块?注意:我使用 UIPageViewController 来显示内容,所以我还需要知道每页的段落数。

谢谢。

0 投票
5 回答
3325 浏览

ios - 如果全宽并位于 textContainer 顶部,则 UITextView textContainer 排除路径失败

在 iOS 8 中,我尝试将 UIImageView 添加为 UITextView 的子视图,类似于此处显示的内容 - 但在图像下方显示文本。

在此处输入图像描述

我想使用排除路径来执行此操作,因为在其他设备上,我可能会根据屏幕尺寸以不同方式定位图像。

但是有一个问题,如果用于创建排除路径的 CGRect 的 Y 原点为 0,并且占据了 textView 的整个宽度,则排除失败并且文本出现在排除路径中(因此文本显示在imageView,正如您在该屏幕截图中看到的那样)。

为了测试这一点,我使用“单一视图”Xcode 模板构建了一个简单的应用程序,其中包含以下内容:

我还尝试继承 NSTextContainer 并覆盖 -lineFragmentRectForProposedRect 方法,但在那里调整 Y 原点似乎也无济于事。

为了使用自定义的 NSTextContainer,我在 viewDidLoad() 中像这样设置 UITextView 堆栈:

然后我像这样调整 CustomTextContainer 中的 Y 原点......但这同样失败了:

我想这可以被认为是我需要报告的 Apple 错误(除非我遗漏了一些明显的东西),但如果有人有解决方法,将不胜感激。

0 投票
0 回答
708 浏览

ios - UITextView 的 NSTextContainer 在文本视图高度上的错误位置 NSLayoutConstraint 更改

我已经进行了子类化UITextView以使其返回一个内在的内容大小,如下所示:

我已经添加了一个观察者UITextViewTextDidChangeNotification,当文本视图内容发生变化时,我会更新它的高度以使其随着文本高度的增长而增长:

但是当它们的行数足以填充文本视图高度时,在添加新行的一半时间中,UITextView 的 NSTextContainer 并没有很好地放置,就像你在这张图片中看到的那样

在此处输入图像描述

(NSTextContainer 用红色标出,UITextView 用蓝色标出)在
添加新行的另一半时间,NSTextContainer 被正确替换。

我没有找到如何解决这种奇怪的行为。
我希望你们中的一个人有一个解决它的答案。

谢谢

0 投票
0 回答
259 浏览

ios - 如何在 UITextView 中旋转 NSTextContainer 的文本片段?

我正在使用 UITextView 并希望更改文本片段的角度,如下图所述。

当前结果显示了我的实际方式:

frameText.layer.transform = CATransform3DMakeRotation(DEGREES_TO_RADIANS(angle), 0, 0, 1);

在此处输入图像描述

正如 Ray Wenderlich 在他的Text Kit 教程中所描述的那样, TextView 被分成几个类:

在此处输入图像描述

我知道,可以在自定义中定义文本片段的大小和位置,NSTextContainer例如使用

(CGRect)lineFragmentRectForProposedRect:(CGRect)proposedRect atIndex:(NSUInteger)characterIndex writingDirection:(NSWritingDirection)baseWritingDirection remainingRect:(CGRect *)remainingRect {...}方法。

但我找不到直接旋转文本片段的方法。 有谁知道如何实现这一目标?