问题标签 [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 回答
762 浏览

objective-c - 使用 NSLayoutManager 停止文本换行

给定任意的单行字符串,我的目标是将其渲染为位图表示。但是,我无法事先找出它的尺寸,所以我只能获取字形范围的边界矩形并在画布不够大时调整画布的大小。不幸的是,如果画布对于字符串不够宽,但足够高以使文本可以换行,布局管理器会认为这是最好的。如何阻止布局管理器包装文本?

0 投票
1 回答
232 浏览

cocoa - 如何创建类似Skype的消息窗口?

我只是想设计类似 Skype 的消息窗口,为此我采用了 NSDrawer 元素。它包含:左侧的表格视图,顶部的菜单项,右下角的文本字段和右侧中心部分的文本视图。使用文本视图,我可以播放正在显示的字符串,但我无法在消息或围绕用户名和时间戳的圆形矩形之间画线。

谁能建议我如何实现与 Skype 中相同的中央消息视图的外观和感觉?或者有没有比 NSTextView 更好的控制?

谢谢,任何建议... Miraaj

0 投票
1 回答
674 浏览

objective-c - How to paint background of specific range of text in NSTextView

This is not a specific bug, its more about not knowing how to do something.

I've an NSTextView and I need to paint the background of specific ranges of text when the user clicks on a specific part of the text view. I've tried this but I just get erratic behaviour in the sense that sometimes text loses the foreground color or the background doesn't span the whole range:

For the sake of simplicity assume that range is always a valid string (it is in my testing environment).

0 投票
1 回答
1129 浏览

cocoa - 尝试将 NSMutableParagraphStyle 应用于新的 NSRange 失败

全部,

我正在调整 NSTextView 以基本上支持插入样板文本和缩进。我遇到了一个问题,即在我从编辑范围中删除样板缩进样式后,样板文本的缩进应用于非样板文本(我在用户按 Enter 时删除了样式)。这就是事情变得奇怪的地方:

在编辑器中显示文本标尺后,我看到了改变缩进的行为。输入回车键后,我运行以下代码:

最初,这是可行的,但是如果我将光标向上移动到该新行上方的锅炉化缩进文本,则制表位会重新出现并且当我将光标向下移动到回车创建的新行时不会消失. 在我看来,前一段的风格正在应用于新的段落。

我在网上放了一段视频(30 秒 1.3 MB),显示了这个问题:

http://gordonjl.com/files/indentingProblem%20-%20Computer.m4v

另外:是的,这是一种糟糕的方法,但这是此版本的最后一个错误,我必须发布它。在后续版本中,我希望将 NSTextViews 插入滚动区域并以更明确的方式对其进行管理。在那之前,帮助!

0 投票
2 回答
2142 浏览

objective-c - 如何正确确定属性字符串的宽度

我想要做的:使用 NSLayoutManager 布局文本并将其 NSTextContainer 设置为字符串数组中最宽字符串(字形)的宽度。

我的问题是:确定总“字形宽度”的方法似乎不正确,因为当我渲染文本时它会换行。

我做了一个实验,使用 32 个字符串和 Monaco 12 点字体,长度报告为 224.0,但如果长度设置为 234.0,文本只会停止换行。

这段代码演示了我上面所说的内容,并在计算的字形宽度的右侧显示了一条垂直线。

0 投票
1 回答
360 浏览

cocoa - Cocoa:NSTextStorageDelegate 有过时的 NSLayoutManager?

我正在使用 NSTextView 并为其-textStorage属性设置了一个委托。收到后,-textStorageDidProcessEditing:我需要将属性应用于部分文本。

我的属性正在被应用,但它们总是在我进行编辑之前应用于文本,即使我不是从-will...but调用 NSLayoutManager 的方法did...

就好像布局管理器在执行时不知道最近的字形插入/删除,所以我假设 NSTextView/NSTextStorage 调用委托方法然后通知布局管理器进行更新。

有没有办法可以强制布局管理器立即更新,以便我可以让它工作?

我知道NSTextStorage's-addAttribute:value:range:方法并且到目前为止一直在成功使用这些方法,但是我已经达到了现在需要通过布局管理器执行此操作的地步,而不是作为重构/优化练习的一部分。

0 投票
1 回答
458 浏览

cocoa - NSLayoutManager setAllowsNonContiguousLayout misplaces caret

With setAllowsNonContiguousLayout set to YES, if I perform the following steps I get weird behaviour:

  1. Select all text in the NSTextView
  2. Hit backspace to remove all the text
  3. Type a few lines of text
  4. Trying using backspace to delete the text again

At step 4 the cursor jumps up to the line above and at a seemingly random point on the line, yet the actual glyphs are deleted from the correct location.

Is non-contiguous layout a bit experimental/buggy like this? If I turn it off things work as expected.

I'll file a bug report with Apple, but has anybody else seen this behaviour and worked around it?

0 投票
1 回答
206 浏览

cocoa - 对 NSTextView 的更改未到达屏幕

我有一个由我自己组装的文本系统支持的 NSTextView,按照 Cocoa 文档中文本系统概述中的“手动组装文本系统”部分的内容。它成功地在屏幕上显示了 NSTextStorage 的内容。

但是当我输入它时,似乎什么也没有发生——屏幕上的文字没有改变。如果我选择文本,则选择的形状表明文本已更改。如果我将文本复制并粘贴到 TextEdit 中,我什至可以看到我的编辑。如果我输入足够多,我可以让它抛出异常:

天哪,这看起来像是我可以花大半天时间调试的东西。这里发生了什么?

0 投票
1 回答
376 浏览

objective-c - 为 NSTextView 中的线片段重绘单个矩形

我们有一个 NSTextView 需要在某些事件上重绘单行片段。

本质上,它是一个大纲。因此,当特定行收到“tab out”消息时,我们希望移动包含字形的矩形,而不仅仅是插入 tab 键。

关于如何做到这一点的任何想法?

谢谢!

0 投票
3 回答
12858 浏览

objective-c - Core Text 中的行距是如何工作的?(为什么它与 NSLayoutManager 不同?)

我正在尝试使用 Core Text 函数绘制文本,其行距尽可能接近使用 NSTextView 时的行距。

以这个字体为例:

如果我在 NSTextView 中使用,这种字体的行高是 111.0。

现在,如果我对 Core Text 做同样的事情,结果是 110.4(假设你可以通过添加上升、下降和前导来计算行高)。

这非常接近 111.0,但对于某些字体,差异要大得多。例如对于 Helvetica,NSLayoutManager 给出 115.0 而 CTFont ascent + descent +leading = 96.0。显然,对于 Helvetica,我无法使用上升 + 下降 + 引导来计算行间距。

所以我想我会使用 CTFrame 和 CTFramesetter 来布局几行并从中获取行间距。但这也给出了不同的值。

所以现在的行间距与我在 NSTextView 中使用的 111.0 更加不同,而且并不是每一行都是相等的。似乎换行符增加了一些额外的空间(即使默认值为paragraphSpacingBefore0.0)。

我现在正在通过 NSLayoutManager 获取行高然后单独绘制每个 CTLine 来解决这个问题,但我想知道是否有更好的方法来做到这一点。