When ViewThatFits
is used with a text field and the HStack
should be shown, SwiftUI seems to retain the VStack
layout. Additionally, tapping on any text field to present the software keyboard only works when the VStack
layout is presented.
In the case where the HStack
layout should be shown, tapping on a text field returns the following in the console:
-[RTIInputSystemClient remoteTextInputSessionWithID:performInputOperation:] perform input operation requires a valid sessionID. inputModality = Keyboard, inputOperation = <null selector>, customInfoType = UIEmojiSearchOperations
<code>struct ContentView: View {
@State var text1 = ""
@State var text2 = ""
@ViewBuilder var content: some View {
Image(systemName: "globe")
.font(.system(size: 100))
Text("Hello")
.font(.system(size: 50))
}
var textfields: some View {
VStack {
TextField("text1", text: $text1)
TextField("text2", text: $text2)
}
.textFieldStyle(.roundedBorder)
}
var body: some View {
ViewThatFits {
VStack {
content
textfields
}
HStack {
content
textfields
}
}
.padding()
}
}
</code>
<code>struct ContentView: View {
@State var text1 = ""
@State var text2 = ""
@ViewBuilder var content: some View {
Image(systemName: "globe")
.font(.system(size: 100))
Text("Hello")
.font(.system(size: 50))
}
var textfields: some View {
VStack {
TextField("text1", text: $text1)
TextField("text2", text: $text2)
}
.textFieldStyle(.roundedBorder)
}
var body: some View {
ViewThatFits {
VStack {
content
textfields
}
HStack {
content
textfields
}
}
.padding()
}
}
</code>
struct ContentView: View {
@State var text1 = ""
@State var text2 = ""
@ViewBuilder var content: some View {
Image(systemName: "globe")
.font(.system(size: 100))
Text("Hello")
.font(.system(size: 50))
}
var textfields: some View {
VStack {
TextField("text1", text: $text1)
TextField("text2", text: $text2)
}
.textFieldStyle(.roundedBorder)
}
var body: some View {
ViewThatFits {
VStack {
content
textfields
}
HStack {
content
textfields
}
}
.padding()
}
}
2