Программная клавиатура SwiftUI + два текстовых поля = конфликт ограничений - PullRequest
0 голосов
/ 12 июля 2020

TL; DR

Нажатие на секунду TextField при отображении клавиатуры вызывает конфликт ограничений.

Подробности

Приведенный ниже код можно запускать как есть. Коснитесь верхнего элемента TextField, затем нижнего. Консоль Xcode сообщает об этом (сокращено для ясности):

Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 

    <'assistantHeight' TUISystemInputAssistantView.height == 44   (active)>
    <'assistantView.bottom' TUISystemInputAssistantView.bottom == _UIKBCompatInputView.top   (active)>
    <'assistantView.top' V:|-(0)-[TUISystemInputAssistantView]   (active, names: '|':UIInputSetHostView )>
    <'inputView.top' V:|-(0)-[_UIKBCompatInputView]   (active, names: '|':UIInputSetHostView )>

Will attempt to recover by breaking constraint 
    <'assistantView.bottom' ...>

Вопросы

AFAIK Я не могу контролировать ни одно из четырех ограничений. Есть ли способ избежать этого? Стоит ли вообще волноваться?

Код

struct ContentView: View {
    @State private var text1 = ""
    @State private var text2 = ""

    var body: some View {
        VStack {
            TextField("Tap here first...", text: $text1)
            .background(Color.white).padding()

            TextField("...then tap here", text: $text2)
            .background(Color.white).padding()

            Spacer()
        }.background(Color.gray)
    }
}

1 Ответ

1 голос
/ 05 августа 2020
ты уже решил это? если нет, возможно, это поможет!
GeometryReader.init { geometry in
        ScrollView.init {
            VStack.init(alignment: .leading, spacing: nil, content: {
                Text("Hello.")
                    .font(.custom("Helvetica-Bold", size: 32))
                Text("This just my sample application using swift UI")
                    .padding(.init(top: 0, leading: 0, bottom: 0, trailing: (geometry.size.width * 0.35)))
                    .foregroundColor(.gray)
                TextField.init("Email Address", text: self.$textFieldName)
                    .frame(width: geometry.size.width, height: 50)
                    .disableAutocorrection(true)
                    .layoutPriority(1000)
                TextField.init("Email Address", text: self.$textFieldName)
                    .frame(width: geometry.size.width, height: 50)
                    .disableAutocorrection(true)
                    .layoutPriority(1000)
            })
        }
    }

, если вам интересно, что с вами происходит, ограничивает его, потому что в вашей клавиатуре была автокоррекция.

используя эту строку,
.disableAutocorrection(<#Bool?#>)
избавьтесь от вкладки автокоррекции в в верхней части клавиатуры.

...