gpt4 book ai didi

自定义文本字段上的 swiftui ios15 键盘回避问题

转载 作者:行者123 更新时间:2023-12-05 05:38:58 25 4
gpt4 key购买 nike

重新发布此 Adjust View up with Keyboard show in SwiftUI 3.0 iOS15 中的问题.

SwiftUI 键盘回避不会显示整个文本字段,包括叠加层。

我已经尝试了很多与谷歌搜索不同的方法。
有人对此有任何解决方案吗?

struct ContentView: View {
@State var text: String = ""
var body: some View {
ScrollView {
VStack {
Spacer(minLength: 600)
TextField("Placeholder", text: $text)
.textFieldStyle(CustomTextFieldStyle())
}
}
}
}

struct CustomTextFieldStyle: TextFieldStyle {
func _body(configuration: TextField<Self._Label>) -> some View {
configuration
.padding(10)
.overlay(
RoundedRectangle(cornerRadius: 20)
.stroke(Color.red, lineWidth: 5)
)
}
}

Image Preview

最佳答案

您可以编写自定义 UITextFeild,其中 intrinsicContentSize 将被覆盖。

例子:

final class _UITextField: UITextField {
override var intrinsicContentSize: CGSize {
CGSize(width: UIView.noIntrinsicMetric, height: 56)
}
}

然后,您可以使用 UIViewRepresentable 协议(protocol)和 UITextFieldDelegate 编写您自己的 TextField 实现:

struct _TextField: UIViewRepresentable {
private let title: String?
@Binding var text: String

let textField = _UITextField()

init(
_ title: String?,
text: Binding<String>
) {
self.title = title
self._text = text
}

func makeCoordinator() -> _TextFieldCoordinator {
_TextFieldCoordinator(self)
}

func makeUIView(context: Context) -> _UITextField {
textField.placeholder = title
textField.delegate = context.coordinator
return textField
}

func updateUIView(_ uiView: _UITextField, context: Context) {}
}

final class _TextFieldCoordinator: NSObject, UITextFieldDelegate {
private let control: _TextField

init(_ control: _TextField) {
self.control = control
super.init()
control.textField.addTarget(self, action: #selector(textFieldEditingChanged), for: .editingChanged)
}

@objc private func textFieldEditingChanged(_ textField: UITextField) {
control.text = textField.text ?? ""
}
}

关于自定义文本字段上的 swiftui ios15 键盘回避问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72804575/

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