gpt4 book ai didi

macos - 使用选项卡时 NSTextView 过早换行

转载 作者:行者123 更新时间:2023-12-03 17:13:28 27 4
gpt4 key购买 nike

如果我输入一行制表符,我会在第 51 列之后出现 NSTextView 换行的奇怪问题。这只发生在制表符上,不会发生在任何其他字符上,这些字符在 TextView 的边缘正确换行,而不是在第 51 个字符之后。

这很容易重复。在 XCode 中创建一个空白项目,其中只有一个窗口和一个 NSTextView。唯一的非默认设置是我删除了约束,并使用旧样式的自动调整大小来自动调整 TextView 的大小,以便它填充窗口。我没有写任何代码。现在运行应用程序,打开窗口,使其比 51 个字符宽得多,按住 Tab 键,它将提前换行。

提前致谢。

最佳答案

这里的问题是 NSTextView 有一个默认的 NSMutableParagraphStyle 对象,该对象具有一系列属性,例如换行、制表位、边距等...您可以通过转到“格式”菜单、文本 subview 并选择来查看此内容“显示标尺”菜单。 (您可以通过任何 NSTextView 免费获得此菜单)。

显示标尺后,您将看到所有制表位,这将解释为什么到达最后一个制表位后制表符会换行。

因此,您需要的解决方案是创建一个您想要的段落样式对象的选项卡数组,然后将其设置为 NSTextView 的样式。

这是创建选项卡的方法。在此示例中,它将创建 5 个左对齐选项卡,每个选项卡相距 1.5 英寸:

-(NSMutableAttributedString *) textViewTabFormatter:(NSString *)aString
{
float columnWidthInInches = 1.5f;
float pointsPerInch = 72.0f;

NSMutableArray * tabArray = [NSMutableArray arrayWithCapacity:5];

for(NSInteger tabCounter = 0; tabCounter < 5; tabCounter++)
{
NSTextTab * aTab = [[NSTextTab alloc] initWithType:NSLeftTabStopType location:(tabCounter * columnWidthInInches * pointsPerInch)];
[tabArray addObject:aTab];
}

NSMutableParagraphStyle * aMutableParagraphStyle = [[NSParagraphStyle defaultParagraphStyle]mutableCopy];
[aMutableParagraphStyle setTabStops:tabArray];

NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:aString];
[attributedString addAttribute:NSParagraphStyleAttributeName value:aMutableParagraphStyle range:NSMakeRange(0,[aString length])];

return attributedString;
}

然后,在将任何文本添加到 NSTextView 之前调用它,以便设置其中包含制表位的默认段落样式:

[[mainTextView textStorage] setAttributedString:[self textViewTabFormatter:@" "]];

如果您想要更深入的教程,可以在此处找到其他信息:

http://www.mactech.com/articles/mactech/Vol.19/19.08/NSParagraphStyle/index.html

关于macos - 使用选项卡时 NSTextView 过早换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14278119/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com