Конфликт ограничений автоматического макета в SwiftUI при нажатии TextFieldIOS

Программируем под IOS
Ответить
Anonymous
 Конфликт ограничений автоматического макета в SwiftUI при нажатии TextField

Сообщение Anonymous »

Я разрабатываю приложение для iOS с использованием SwiftUI и столкнулся с проблемой конфликта ограничений автоматического макета, которая возникает при нажатии на TextField в LoginView. Я предпринял несколько действий по устранению неполадок, но не смог их решить.
Сообщение об ошибке:

Код: Выделить всё

    Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"",
"",
"",
""
)

Will attempt to recover by breaking constraint


Эта ошибка появляется в консоли, когда я нажимаю TextField в своем LoginView во время запуска кода в симуляции. Приложение не аварийно завершает работу, но консоль указывает на конфликт ограничений, связанных с клавиатурой. Вот мой LoginView:

Код: Выделить всё

struct LoginView: View {
@StateObject var viewModel = LoginViewModel()

var body: some View {
NavigationStack {
VStack {

Spacer()

Image("logo")
.resizable()
.scaledToFit()
.frame(width: 150, height: 100)

VStack {
TextField("Enter your email", text: $viewModel.email)
.autocapitalization(/*@START_MENU_TOKEN@*/.none/*@END_MENU_TOKEN@*/)
.modifier(TextFieldModifier())

SecureField("Enter your password", text: $viewModel.password)
.modifier(TextFieldModifier())
}

Button {
print("Show forgot password")
} label: {
Text("Forgot Password")
.font(.footnote)
.fontWeight(.semibold)
.padding(.top)
.padding(.trailing, 20)
}
.frame(maxWidth: .infinity, alignment: .trailing)

Button {
Task { try await viewModel.signIn() }
} label: {
Text("Login")
.font(.subheadline)
.fontWeight(.semibold)
.foregroundColor(.white)
.frame(width: 360, height: 44)
.background(Color(.black))
.cornerRadius(8)
}
.padding(.vertical)

HStack {
Rectangle()
.frame(width: (UIScreen.main.bounds.width / 2) - 40, height: 0.5)

Text("OR")
.font(.footnote)
.fontWeight(.semibold)
.foregroundColor(.gray)

Rectangle()
.frame(width: (UIScreen.main.bounds.width / 2) - 40, height: 0.5)
}
.foregroundColor(.gray)

HStack {
Image("facebook_logo")
.resizable()
.frame(width: 20, height: 20)

Text("Continue with Facebook")
.font(.footnote)
.fontWeight(.semibold)
.foregroundColor(Color(.systemBlue))
}
.padding(.top, 8)

Spacer()

Divider()

NavigationLink {
AddEmailView()
.navigationBarBackButtonHidden(true)
} label: {
HStack (spacing: 3) {
Text("Don't have an account?")

Text("Sign Up")
.fontWeight(.semibold)
}
.font(.footnote)
}
.padding(.vertical, 16)
}
}
}
}

#Preview {
LoginView()
}
И мой модификатор TextField:

Код: Выделить всё

struct TextFieldModifier: ViewModifier {
func body(content:  Content) ->some View {
content
.font(.subheadline)
.padding(12)
.background(Color(.systemGray6))
.cornerRadius(10)
.padding(.horizontal, 24)
.padding(.top)
}
}
Вопросы:
  • Что может быть причиной конфликта ограничений автоматического макета в приложении SwiftUI?
  • Существуют ли какие-либо известные проблемы с TextField SwiftUI и взаимодействием с клавиатурой, которые могут привести к таким проблемам с ограничениями?
  • Есть предложения по отладке или разрешению этого конфликта ограничений?
Попытки решения:
  • Я проверил TextFieldModifier на наличие потенциальных проблем, но он кажется стандартным.
  • Я пытался упростить представление, удалив другие элементы, но проблема не устранена.
  • Похоже, проблема возникает независимо от используемого мной симулятора или версии iOS.


Подробнее здесь: https://stackoverflow.com/questions/775 ... -textfield
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»