在uitextfiled中输入文本时出现应用程序崩溃并收到如下错误:_NSLayoutTreeLineFragmentRectForGlyphAtIndex无效的字形索引7。 任何帮助将不胜感激..
答案 0 :(得分:0)
__NSLayoutTreeLineFragmentRectForGlyphAtIndex invalid glyph index
内容(据我所知)不会导致崩溃。
但似乎有崩溃和无效字形的根本原因。当您在布局正在进行时对文本存储执行更改和/或反之亦然时,会在自定义NSTextStorage
子类-processEditing
等位置弹出这类错误。
由于OP没有提供更多详细信息,因此建议列表查找而不是解决问题。完成每一步后,尝试运行程序并查找崩溃:
UITextField
子类本身,并使用系统默认组件。这不应该崩溃了。NSTextStorageDelegate
和朋友。 现在进入组件子类;将子类按此顺序重新投入运行,从布局过程中的责任链中逐一导出:
NSGlyphGenerator
子类(如果有)。他们走在命令链的下方。如果没有任何反应,请立即再次使用系统默认值。NSTypesetter
子类执行相同操作,将其放入,然后再将其关闭。NSLayoutManager
子类相同,如果有的话。这个东西还在命令链的下游。NSTextStorage
子类。文本存储位于命令链的高处,可能有多个位置可以断开。然后尝试组合,再次从底部开始,并尝试尽可能多的组合,直到应用程序中断。
找到导致崩溃的确切电话后,请打开一个新问题:)
答案 1 :(得分:0)
在 SwiftUI iOS 14、iPhone XS 上的听写 + 多行输入文本编辑器有一个非常相似的问题。 没有发现有效的解决方案,因此切换回单行。 我喜欢关于动态布局的 ctietze 建议 - 我认为多行 textInput 的情况就是强制重新加载 UI 并退出第一响应者。
[Assert] View <(null):0x0> does not conform to UITextInput protocol
[KBDAnalyticsLog] -[TIAnalyticsService _registerEventSpec:withCompletionHandler:]_block_invoke TIAnalyticsEventSpec with name 'thirdPartyKeyboards' is already registered.
!!! _NSLayoutTreeGetBaselineOffsetForGlyphAtIndex invalid glyph index 0
代码:
TextFieldSection(
title: "title here",
placeholder: "placeholder",
text: self.$text,
isSingleLine: false
)
struct TextFieldSection: View {
...
var body: some View {
Section(header: Text(title)
{
//Would better keep ios 13 - text field, ios 14 - multiline edit https://developer.apple.com/documentation/swiftui/texteditor
if isSingleLine {
TextField(placeholder, text: text)
} else {
if #available(iOS 14.0, *) {
TextEditor(text: text)
} else {
TextField(placeholder, text: text)
}
}
诀窍是控制适用于应用程序的其他部分,并且仅在用户听写的模式屏幕上出现故障。
PS 禁用了任何 3d 派对键盘以避免警告 - 也没有帮助。