为 TextEditor 添加边距
Adding margins to TextEditor
我正在为 TextEditor 添加边距。同时将这些边距保持为可点击区域。
我能够添加 textContainerInset,问题是添加的 Inset 不可点击。
当前代码:
extension NSTextView {
open override var frame: CGRect {
didSet {
textContainerInset = CGSize(width: 72, height: 72)
}
}
}
当前预览:
预期行为(页数):
非常感谢您的建议。非常感谢!
所以我找到了一个简单又困难的解决方案。
1.简单一个
import SwiftUI
extension NSTextView {
open override var frame: CGRect {
didSet {
// Top inset
textContainerInset = NSSize(width: 0, height: 72)
// Left fragment padding <<< This is what I was looking for
textContainer?.lineFragmentPadding = 72
}
}
}
struct TextEditingView: View {
@State private var fullText: String = "One \nTwo \nThree"
var body: some View {
TextEditor(text: $fullText)
.frame(width: 720, height: 480)
.font(.system(size: 24, design: .monospaced))
}
}
结果你得到这个:
演示的存储库:
https://github.com/yaosamo/Swift-TextView-Demo
2。第二种解法
使用 NSParagraphStyle、headIndent、firstLineHeadIndent
我相信这就是 Mac 页面上缩进的实现方式。我不知道他们如何坚持默认缩进。如果你打开标尺,你会看到它设置为 1,你不能低于它。
使用代码
class ParagraphStyle {
let bgColor: NSColor
let paragraphStyle: NSParagraphStyle
init(bgColor: NSColor) {
self.bgColor = bgColor
//Set paragraph style
self.paragraphStyle = {
let mutableParagraphStyle = NSMutableParagraphStyle()
let specialBlock = CustomTextBlock(bgColor: bgColor)
mutableParagraphStyle.textBlocks.append(specialBlock)
mutableParagraphStyle.headIndent = 50 // Add indent here
let style = mutableParagraphStyle as NSParagraphStyle
return style
}()
}}
您可以将 headIndent 添加到文本样式中。它适用于您插入的副本。就像我说的问题,如果你开始输入缩进中断,我不知道如何保留它。
第一个完全符合我的要求。接下来会搞清楚如何使用headIndent/FirstlineheadIndent
多亏了这个社区,我才能找到解决方案!不放弃你也能成功! :D
我正在为 TextEditor 添加边距。同时将这些边距保持为可点击区域。 我能够添加 textContainerInset,问题是添加的 Inset 不可点击。
当前代码:
extension NSTextView {
open override var frame: CGRect {
didSet {
textContainerInset = CGSize(width: 72, height: 72)
}
}
}
当前预览:
预期行为(页数):
非常感谢您的建议。非常感谢!
所以我找到了一个简单又困难的解决方案。
1.简单一个
import SwiftUI
extension NSTextView {
open override var frame: CGRect {
didSet {
// Top inset
textContainerInset = NSSize(width: 0, height: 72)
// Left fragment padding <<< This is what I was looking for
textContainer?.lineFragmentPadding = 72
}
}
}
struct TextEditingView: View {
@State private var fullText: String = "One \nTwo \nThree"
var body: some View {
TextEditor(text: $fullText)
.frame(width: 720, height: 480)
.font(.system(size: 24, design: .monospaced))
}
}
结果你得到这个:
演示的存储库: https://github.com/yaosamo/Swift-TextView-Demo
2。第二种解法
使用 NSParagraphStyle、headIndent、firstLineHeadIndent 我相信这就是 Mac 页面上缩进的实现方式。我不知道他们如何坚持默认缩进。如果你打开标尺,你会看到它设置为 1,你不能低于它。
使用代码
class ParagraphStyle {
let bgColor: NSColor
let paragraphStyle: NSParagraphStyle
init(bgColor: NSColor) {
self.bgColor = bgColor
//Set paragraph style
self.paragraphStyle = {
let mutableParagraphStyle = NSMutableParagraphStyle()
let specialBlock = CustomTextBlock(bgColor: bgColor)
mutableParagraphStyle.textBlocks.append(specialBlock)
mutableParagraphStyle.headIndent = 50 // Add indent here
let style = mutableParagraphStyle as NSParagraphStyle
return style
}()
}}
您可以将 headIndent 添加到文本样式中。它适用于您插入的副本。就像我说的问题,如果你开始输入缩进中断,我不知道如何保留它。
第一个完全符合我的要求。接下来会搞清楚如何使用headIndent/FirstlineheadIndent
多亏了这个社区,我才能找到解决方案!不放弃你也能成功! :D