SwiftUI 中的 UITextField 溢出屏幕宽度

时间:2021-05-17 14:53:46

标签: swift swiftui uikit uitextfield

在 SwiftUI 中使用 UITextField 当文本溢出 UITextField 宽度时,我发现了一个问题。而不是 UITextField 固定大小并滚动文本,它会增长直到溢出屏幕宽度。

我尝试了一些方法,例如在 AppTextField 中放置 fixedSize(),将框架设置为 UITextField,但我没有找到解决此问题的方法。

TextField with few characters

TextField on exceeding the width limit

应用屏幕

struct ContentView: View {
    
    @State var text = ""
    
    var body: some View {
        VStack {
            AppTextField(text: $text)
                .frame(height: 48)
                .padding(.horizontal, 16)
                .overlay(
                    RoundedRectangle(cornerRadius: 8)
                        .stroke(lineWidth: 1)
                )
        }
        .padding(.horizontal, 16)
    }
}

AppTextField

import Foundation
import UIKit
import SwiftUI

struct AppTextField: UIViewRepresentable {
    
    @Binding var text: String
    
    init(text: Binding<String>) {
        self._text = text
    }
    
    func makeUIView(context: UIViewRepresentableContext<AppTextField>) -> UITextField {
        let textField = UITextField(frame: .zero)
        textField.delegate = context.coordinator
        
        return textField
    }

    func makeCoordinator() -> AppTextField.Coordinator {
        return Coordinator(text: $text)
    }

    func updateUIView(_ textField: UITextField, context: UIViewRepresentableContext<AppTextField>) {
        textField.text = text
    }
    
    class Coordinator: NSObject, UITextFieldDelegate {

        @Binding var text: String

        init(text: Binding<String>) {
            self._text = text
        }
        
        func textFieldDidChangeSelection(_ textField: UITextField) {
            guard let text = textField.text else {
                return
            }
            
            DispatchQueue.main.async {
                self.text = text
            }
        }
        
    }
}

0 个答案:

没有答案
相关问题