SwiftUI 软件键盘 + 两个 TextFields = 约束冲突
Posted
技术标签:
【中文标题】SwiftUI 软件键盘 + 两个 TextFields = 约束冲突【英文标题】:SwiftUI Software keyboard + two TextFields = Constraint conflict 【发布时间】:2020-07-12 17:34:55 【问题描述】: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】: 你解决了吗? 如果不是,也许这会有所帮助!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?#>)
摆脱键盘顶部的自动更正选项卡。
【讨论】:
谢谢,将修饰符添加到任一 TextFields 可以防止投诉。并向我展示了键盘视图的“违规”部分是顶部的自动更正窗格。以上是关于SwiftUI 软件键盘 + 两个 TextFields = 约束冲突的主要内容,如果未能解决你的问题,请参考以下文章