问题标签 [nslayoutmanager]

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 投票
1 回答
823 浏览

objective-c - 使用 NSLayoutManager 获取字符串的边界矩形

我有大量独特的字符串,当它们被布置在一个无限大的矩形中时,我想计算它们的边界矩形。目前我使用单个 NSTextStorage/NSLayoutManager 并遍历所有字符串,收集矩形:

问题是:考虑到不需要绘制字符串,是否可以加快计算速度?我只对矩形的宽度和高度感兴趣。

0 投票
2 回答
472 浏览

cocoa - NSTextView lineHeight多次绘制问题

通过设置在文本视图中使用的 NSParagraphStyle 的 lineHeightMultiple ,我在选择文本时会得到绘图工件。这在 TextEdit 中是可重现的。进一步来说:

  1. 以富文本模式打开 TextEdit
  2. 选择 Courier 14 作为字体
  3. 将行高倍数设置为 1.4
  4. 插入一堆文本
  5. 用鼠标选择文本的一部分直到顶部
  6. 开始减少选择(向下移动鼠标)

在某些行中,选择没有完全清除,留下一个 1px 的水平伪影(见截图)。这也发生在不同的字体中,字体大小为 lineHeightMultiple 值(尽管不是全部)。

有没有人经历过或者知道为什么会这样?

谢谢,
鲁本

截屏

0 投票
1 回答
820 浏览

objective-c - NSLayoutManager 文本新行似乎从矩形底部开始向上

我最终看到的是从矩形底部开始向上的文本。当我在视图中绘制它时,它看起来像这样:

我希望文本从顶部开始向下,我还希望文本自动换行,现在它将在新行的单词中间开始。我阅读了关于NSLayoutManagerNSParagraphStyle和的信息NSTypeSetter,但我不知道如何解决这个问题。

0 投票
1 回答
1636 浏览

objective-c - 如何获取从 -textStorageDidProcessEditing: 中可见的字符范围?

对于我的语法高亮实现,我观察到NSTextViewusing的变化-[<NSTextStorageDelegate> textStorageDidProcessEditing:]

我想获得可见字符的范围。上面的代码一直有效,直到我点击backspace,这使它崩溃:

如何获得可见字符的范围以便为它们着色?

0 投票
1 回答
3763 浏览

objective-c - 自动布局正在调整我的窗口大小

我有一个启用了自动布局的笔尖,其中包含一个视图控制器的视图,另外还有一个带有占位符视图的窗口,可以将它们添加到其中。占位符具有相对于它的超级视图和窗口中的其他视图的约束,并且在涉及我的视图控制器之前,我让占位符按照我想要的方式调整窗口大小。稍后我加载笔尖并将其顶级视图添加为占位符的子视图,并且我还手动创建约束以使其与占位符的边缘对齐。

一切都很好,我在我的应用程序中的几个实例中使用了这种模式,但在某些情况下,添加视图后,我的窗口会调整大小!它正在缩小到添加视图的最小尺寸,而不是扩大到当前窗口大小的视图。

到目前为止,我发现防止这种情况发生的唯一方法是,在添加视图并创建其约束时,还要设置视图的框架,以使其具有占位符和窗口当前状态的初始大小。有时这没问题,但我希望能够定义更复杂的约束,而不是简单地将每个边缘与占位符超级视图对齐。我不想为每种情况编写帧算法。

有谁知道发生了什么?如果窗口已经决定了占位符的大小,而不是相反,那么在添加子视图以使当前窗口大小仍然优先时我该怎么办?

我已经看到 Xcode 的 IB 窗口中的弹出菜单似乎是关于仅影响子视图和超级视图的约束(对于我的所有笔尖都设置为前者),与此功能相关的是什么?我还没有找到任何关于它的东西。

0 投票
2 回答
1192 浏览

objective-c - 多个 NSTextView 之间的顺序选择

我有一堆NSTextViews 我想分享一个选择。我基本上希望它的行为类似于在网页上选择文本,其中有多个文本视图,但您可以拖动以在其中顺序选择文本。

我发现这个文档指出可以让多个NSTextContainer对象共享一个对象NSLayoutManager,从而共享选择。NSLayoutManager这是我想要的一半,除了一个只能有一个NSTextStorage对象的事实。我希望每个文本视图都有自己的NSTextStorage,以便每个文本视图都可以有自己的文本,但我仍然希望能够通过一次拖动在多个文本视图中选择文本。这可能吗?

0 投票
1 回答
462 浏览

scroll - 保存和恢复 NSTextView 的位置

我希望能够保存 NSTextView 的当前文本和可见区域并恢复它。使用 visibleRect 和 scrollRectToVisible: 似乎会提供不一致的结果。如果我这样做:

当视图位于距顶部不到 85 行的位置时,视图将保持原位,但越往下走,它就越远离。在距顶部 200 行处,它以 277 结尾,在 300 处以 408 结尾,依此类推。

如果没有 replaceTextStorage,它也可以按预期工作,但是替换文本并找到上一个位置才是重点。关于替换文本的某些事情会导致线条矩形计算变得不稳定。

显然,我打算从真实应用程序中保存的对象中获取新的 visibleRect 和 textStorage ,但这说明了最少代码的问题。

有任何想法吗?

0 投票
1 回答
400 浏览

macos - 在 NSTextView 中围绕子视图布置文本

我想要做的是拥有一个 NSTextView 并向其添加自定义 NSView 子视图,但拥有它以便文本可以围绕子视图布局。

现在,我可以轻松地将子视图添加到文本视图,但当然,它进入文本视图并且文本不知道子视图,所以它只是在子视图上方/下方运行。当然不是我想要的。

所以我希望能够至少在“块”中添加我自己的视图(比如当 HTML 元素是块元素时,所以它在自己的行上),也可能是“内联”(即子视图与文本一致,就像 HTML 元素如何内联一样)尽管这不是绝对必需的。

我不太清楚如何使这项工作。我看到可以将内容添加到文本视图的唯一方法是使用文本附件,但这些似乎仅归入图像/文件,并且仅在不包含(据我所知)任意 NSView 的 NSCell 中。

我觉得这应该是可能的,我从哪里开始?

0 投票
1 回答
336 浏览

cocoa - 使用 NSGlyph 和内存分配

在一种频繁跟踪换行符的方法中,对于NSTextView visibleRect,我正在为NSGlyph分配内存以使用NSLayoutManager getGlyphs:range:

我应该/我能找出这应该是多少内存,因为我有一个范围的参考(不影响布局),而且,应该进行什么样的清理——使用ARC运行?

代码(在主队列上运行):

0 投票
1 回答
1808 浏览

ios - '-[UITextView autocapitalizationType]:无法识别的选择器发送到实例?

我想在单击按钮时创建 uiview 的自定义子类(SubCustomView),并在 SubCustomView 上添加 uitextview 类作为子视图。当我启动 uitextview 我使用initWithFrame:textContainer:方法。当我使用这种方法时,项目崩溃了。当我使用initWithFrame:方法时,项目不会崩溃。我正在使用以下代码:

错误是:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UITextView setKeyboardAppearance:]: unrecognized selector sent to instance 0x93ab000”

首先抛出调用堆栈: