SwiftUI 表单 TextField 在 iOS 13.2 中的普通 UINavigationViewController 中包装时消失
Posted
技术标签:
【中文标题】SwiftUI 表单 TextField 在 iOS 13.2 中的普通 UINavigationViewController 中包装时消失【英文标题】:SwiftUI Form TextField Disappears When Wrapped In A Normal UINavigationViewController In iOS 13.2 【发布时间】:2019-11-08 20:58:34 【问题描述】:这是我的问题,我有一个用 SwiftUI 编写的长表单。在 ios 13.1 中,表单可以正常工作。现在使用 iOS 13.2,当我滚动时,表单中的 TextFields 会消失。我需要表单在已经有很多 UIKit 视图的项目中工作,因此我将表单包装在 UIHostingController 中。所以 UIHostingController 以编程方式从我的其他 ViewController 之一推送到 UINavigationViewController。
为了演示这个问题,我使用 XCode 11.2 (11B52) 创建了一个干净的项目,并在 iOS 13.2 模拟器中运行它。字段消失。在 iOS 13.1.2 上,这些字段按预期工作。
在一个新项目中使用下面的代码,并将情节提要视图包装在 UINavigationViewController 中,然后将一个按钮连接到 showForm() 将产生我所遇到的情况。
import SwiftUI
class ViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
extension ViewController
@IBAction func showForm()
navigationController?.pushViewController(FormViewController(), animated: true)
struct FormView: View
@State private var text: String = ""
extension FormView
var body: some View
Form
ForEach(0..<100) index in
VStack
Text("Question \(index)")
TextField("", text: self.$text)
.textFieldStyle(RoundedBorderTextFieldStyle())
class FormViewController: UIHostingController<FormView>
convenience init()
self.init(rootView: FormView())
如果有人能解决这个问题,或者知道发生了什么,我将不胜感激。
【问题讨论】:
Xcode 的版本似乎无关紧要。具有上述代码的当前 Xcode 仍然适用于装有 iOS 13.1 的设备。该应用程序的存档版本适用于 13.1,但不适用于 13.2 【参考方案1】:我能找到解决这个问题的唯一方法是恢复使用 UIKit。
【讨论】:
以上是关于SwiftUI 表单 TextField 在 iOS 13.2 中的普通 UINavigationViewController 中包装时消失的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 14 中编辑 TextField 时 SwiftUI 崩溃
点击另一个 TextField 时,SwiftUI TextField 不会提交更改