gpt4 book ai didi

swift - 删除 TextEditor 上的填充

转载 作者:行者123 更新时间:2023-12-05 05:45:57 26 4
gpt4 key购买 nike

我下面的自定义文本编辑器,一旦您单击笔进行编辑,就会出现一个新空格,因此之前的文本与新文本不在同一行。我怎样才能解决这个问题?这是一个简单的可重现示例:

struct SwiftUIView: View {

@State var name: String = "test"
@State var showEdit: Bool = true

var body: some View {
HStack {
HStack {
if(showEdit) {
CustomTextEditor.init(placeholder: "My unique name", text: $name)
.font(.headline)
} else {
Text(name)
.font(.headline)
}
}

Spacer()

Button(action: {
showEdit.toggle()
}) {
Image(systemName: "pencil")
.foregroundColor(.secondary)
}
}
}
}

struct CustomTextEditor: View {
let placeholder: String

@Binding var text: String

var body: some View {
ZStack {
if text.isEmpty {
Text(placeholder)
.foregroundColor(Color.primary.opacity(0.25))
}
TextEditor(text: $text)
}.onAppear() {
UITextView.appearance().backgroundColor = .clear
}.onDisappear() {
UITextView.appearance().backgroundColor = nil
}
}
}

我希望它具有与插入简单的 Text("") 相同的填充属性,所以当我在 Text("xyz") 之间切换时TextEditor(text: $xyz) 它具有相同的填充对齐方式。现在 TextEditor 有一个奇怪的填充。

最佳答案

尝试将 TextTextEditor(或 TextField,就此而言)对齐,您会发疯的,所以不要试试看使用另一个禁用的 TextEditor,并根据绑定(bind)变量是否为空来控制顶部的 .opacity()。像这样:

struct CustomTextEditor: View {

@Binding var text: String
@State private var placeholder: String

init(placeholder: String, text: Binding<String>) {
_text = text
_placeholder = State(initialValue: placeholder)
}

var body: some View {
ZStack {
TextEditor(text: $placeholder)
.disabled(true)
TextEditor(text: $text)
.opacity(text == "" ? 0.7 : 1)
}
}
}

如果没有文本,此 View 将显示占位符,并在有文本时立即隐藏占位符。

编辑:

您不需要其他 View 中的按钮等。它变得简单:

struct SwiftUIView: View {
@State var name: String = ""

var body: some View {
CustomTextEditor.init(placeholder: "My unique name", text: $name)
.font(.headline)
.padding()
}
}

如果您需要键盘上的“完成”按钮,请将您的 CustomTextEditor() 更改为:

struct CustomTextEditor: View {

@Binding var text: String
@State private var placeholder: String

@FocusState var isFocused: Bool

init(placeholder: String, text: Binding<String>) {
_text = text
_placeholder = State(initialValue: placeholder)
}

var body: some View {
ZStack {
TextEditor(text: $placeholder)
.disabled(true)
TextEditor(text: $text)
.opacity(text == "" ? 0.7 : 1)
.focused($isFocused)
}
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
Button {
isFocused = false
} label: {
Text("Done")
.foregroundColor(.accentColor)
.padding(.trailing)
}
}
}
}
}

关于swift - 删除 TextEditor 上的填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71259342/

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