问题标签 [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.
ios - iOS7 中的 UITextView contentSize 变化和 NSLayoutManager
问题:在某些情况下UITextView
默默地改变它。contentSize
最简单的文本视图,带有大文本和键盘。只需添加 UITextView 插座并设置- viewDidLoad
为:
现在显示和隐藏键盘在某些情况下会导致文本跳转。
我找到了按 subclass 跳转的原因UITextView
。我的子类中唯一的方法是:
它显示contentSize
缩小和扩大键盘隐藏。像这样的东西:
看起来UITextView
iOS7 中的行为发生了很大变化。现在有些东西坏了。
进一步发现我发现layoutManager
我的 textView 的新属性也发生了变化。现在日志中有一些有趣的信息:
下一行 contentSize = {320, 885}
contains Layout tree contents: ..., 2127 laid glyphs, 51 laid line fragments
。所以看起来某种自动布局试图在键盘显示上重新布局 textView 并更改 contentSize,即使布局尚未完成。即使我的 textView 在键盘显示/隐藏之间没有变化,它也会运行。
问题是:如何防止 contentSize 发生变化?
ios - 在单元格中编辑 UITextView 时,iOS 7 中的 UITableView 无法滚动到正确的位置
我有一个带有静态单元格的表格视图。一个单元格包含 aUITextView
并且heightForRowAtIndexPath:
是动态计算的,因此单元格总是足够高以容纳文本(实际上,这部分在 iOS 7 下需要一些工作,因为不再可能简单地向 textView 询问它的contentSize
)。
当我在文本视图中点击开始编辑时,键盘动画就位,tableView 上的 contentInsets 会自动调整以解决此问题(即,iPhone 纵向方向的底部插图为 216 像素),光标/插入符号变为可见,并且然后表格视图滚动到另一个位置。它最终看起来像一个反弹。
这是模拟器中的视频:https ://www.dropbox.com/s/htdbb0t7985u6n4/textview-bounce.mov
请注意,插入符号在键盘上方有一秒钟。我一直在记录表格视图contentOffset
,我可以看到它滚动到一个不错的值,然后突然“转身”并向后滚动。
奇怪的是,如果我在模拟器中打开慢速动画,问题就会消失;contentOffset
逆转没有发生,事情按我的预期工作(即 iOS 6 行为)。
这是动画慢的视频:https ://www.dropbox.com/s/nhn7vspx86t4exb/textview-nobounce.mov
实施说明:
- 文本视图是粉红色的,并且具有 AutoLayout 约束,使其固定在距离为 0 的单元格上(左侧除外,即 10pts)
- 我
boundingRectWithSize:
用来计算表格视图高度,调整 lineFragmentPadding 和任何顶部/底部插图。似乎工作。 - 我已将 textView 设置为不可滚动,但当
scrollEnabled
== YES时没有发现任何不同 - 这是一个表视图控制器,
automaticallyAdjustsScrollViewInsets
== YES
ios - 动画 NSLayoutManager 绘图
我有一个NSLayoutManager
使用以下代码绘制文本的内容:
在我看来-drawRect:
。这非常有效,但我真正想做的是逐个字符地为文本设置动画,就好像它正在被输入一样。
我尝试将字符附加到“可见字符串”变量,然后调用-[self setNeedsDisplay]
,但是在处理大约 20 个字符以上的文本时,它开始滞后,因为它每次都会重绘所有文本。
回归:我怎样才能为NSLayoutManager
's设置动画-drawGlyphsForGlyphRange:atPoint:
?
ios - 为 NSTextStorage 子类设置 viewController 的 layoutManager 时字形索引无效
我的目标是使用 TextKit 斜体,设置某些单词的文本大小等。
首先,我只是想突出显示文本字符串中的一个字符。作为 TextKit 的新手(并且对于一般的编程来说如实说),我正在关注 obc.io 问题 #5 的语法高亮主题。
当使用我创建的 UITextView 内置的 NSLayoutManager 时,我的文本出现在屏幕上,没有抛出异常。当我在视图控制器(如下)中将 UITextView 设置为 NSTextStorage 子类的布局管理器时,我收到无效字形索引异常的错误。
控制台输出如下:
我多次阅读 Apple 的 Text Programming Guide 并认为我了解文本系统是如何建立的,但不知道为什么我的字形数会超过字形数......
ios - 在我以编程方式实例化的 UITextView(使用 NSTextContainer 初始化)中,.text 属性始终为 nil
[在底部更新了解决方案和工作代码]
在 -viewDidLoad 我分配,initWithFrame:
将 myTextView 添加到子视图
设置一些基本属性(对齐方式、背景颜色、文本颜色等)
设置默认文本
.text 没有出现。myTextView 出现(由背景颜色表示),设置断点,它有一个框架,内存等。一切看起来都正确。myTextView 看起来不错,但 .text 为零。我改变它,设置它,更新它。不管 .text 保持为零。
我一遍又一遍地阅读文档。没有提到我没有做的任何事情。我不知所措。帮助。
在@interface MyController()...
过去一切都是(弱),但我把它调高(强)以防万一。没有骰子。
在 viewDidLoad...
[更新:解决方案]
当使用 NSTextContainer 分配/初始化 UITextView 时,您还需要分别初始化 NSLayoutManager 和 NSTextStorage 以使 .text 粘贴。
这是更新的工作代码
ios - 使用核心文本边界矩形
如果我错了,请纠正我。
我尝试使用 Core Text 计算出字符的确切边界矩形。但是我收到的高度总是大于屏幕上绘制字符的实际高度。在这种情况下,实际高度在 20 左右,但无论如何该函数只给我 46。
任何人都可以对此有所了解吗?
谢谢。
这是代码
ios - 使用 CALayer 突出显示跨越多行的 UITextView 中的文本
这是为UITextView 中的文本获取 CGRect 的延续,目的是使用 CALayer 突出显示。我无法为每个线段中的范围获取正确的矩形。
这是我目前的尝试。我基本上使用 enumerateLineFragmentsForGlyphRange:usingBlock: 来循环遍历每一行。然后我使用 enumerateEnclosureRectsForGlyphRange:withinSelectedGlyphRange:usingBlock: 来确保当前行上的文本范围与行的范围匹配并且具有相同的 Y 坐标。有时这有效,有时则无效。
似乎如果搜索文本接近返回,它会突出显示。(y坐标)。
在此屏幕截图中,应该突出显示“返回生成的字符范围”。
如果文本不在返回或空格附近,这似乎可以正常工作:
我错过了什么吗?
更新:
我已经将问题缩小了一点,我相信 enumerateLineFragmentsForGlyphRange: usingBlock: 正在跳过有返回的行。
ios7 - 替换uitextview的布局管理器
Mac OS X 上的 NSTextContainer 有一个方法 replaceLayoutManager:将 NSTextView 的 NSLayoutManager 替换为 NSLayoutManager 的子类。
不幸的是iOS没有这样的功能。我尝试了这些代码行的组合,但它一直在崩溃。
替换 UITextview 的 NSLayoutManager 的正确程序是什么?
macos - NSTextView 在打字过程中滞后
我有两个具有共享自定义 NSTextStorage 子类的 NSTextView。文本视图相互镜像。这工作正常,直到我按回车。然后第二个文本视图开始滞后,甚至不显示任何新输入。无论我输入哪个文本视图,都会发生这种情况。
如何强制第二个 textview 与第一个 textview 保持同步?
这是我的 NSTextStorage 子类。
macros - NSLayoutManager drawGlyphsForGlyphRange:atPoint:
NSLayoutManager 类中的函数 drawGlyphsForGlyphRange:atPoint: 是如何实现的?我知道它是由 NSTextView 调用的,然后又调用了 fillBackgroundRectArray:count:forCharacterRange:color:
但是它如何确定指定字形的背景颜色(如果有)?