给一个NSTextView添加一些内边距/外边距

15

我该如何为NSTextView添加左侧的padding或者margin? 我知道如何在NSTextField中进行操作(通过子类化NSTextFieldCell),但是在NSTextView中该怎么做呢?

编辑:更多信息如下: 1. 此文本视图只包含纯文本,没有其他像正常文本编辑器(例如段落缩进)一样的花哨效果。 2. 是否可以使用setTextContainerInset:实现此功能?

5个回答

18
你可以尝试子类化 NSTextView 并覆盖 textContainerOrigin
详见这里
例如,这个子类将给出一个顶部和底部边距为 5,左侧为 20,右侧为 10。
@implementation MyTextView

- (void)awakeFromNib {
    [super setTextContainerInset:NSMakeSize(15.0f, 5.0f)];
}


- (NSPoint)textContainerOrigin {
    NSPoint origin = [super textContainerOrigin];
    NSPoint newOrigin = NSMakePoint(origin.x + 5.0f, origin.y);
    return newOrigin;
}

@end

1
这种方法和简单地使用setTextContainerInset:有什么确切的区别? - Patrick Pijnappel
3
setTextContainerInset函数会将文本容器的顶部和两侧都进行相同的内边距设置。在该示例中,改变文本容器的起点位置会导致它具有非对称的填充效果。 - Abizern

5

补充一下,iOS7在UITextView中增加了一个属性叫做textContainerInset。调用setTextContainerInset会为文本视图内的内容创建边距。


2
现在,OS X 也具有这个属性。 - Marc Rochkind
你在哪里设置它?可以在InterfaceBuilder中访问吗,还是只能通过编程实现?并且它可以针对顶部/左侧/底部/右侧进行不同的设置吗? - Motti Shneor

4
当TextEdit处于“自动换行到页”模式时,它的方法是将文本视图放置在较大的视图中,并将该较大的视图设置为滚动视图的文档视图。这样设置需要更多的工作,但不会将呈现信息泄露到模型中(以特殊定制的段落样式的形式)。

2
创建一个可变的段落样式(最好是通过复制默认段落样式并将其头缩进和首行头缩进设置为所需的左边距来创建)。然后,将此段落样式设置为视图文本存储的整个内容的NSParagraphStyleAttributeName属性的值。
请注意,这将显示在从/给您的视图获取的RTF和可能的HTML数据中。如果视图不是只读的(即用户可以编辑文本,并且您将从视图检索或接收该文本),则应该避免使用此解决方案。如果用户可以显示标尺并自己编辑段落样式,则应该绝对避免使用此解决方案。

-1
这就是使用纯文本样式 NSTextView 所需要的全部内容:
textView.textContainerInset = NSSize(width: 15, height: 5)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接