tvOS 17中SwiftUI Alert添加TextField后出现额外按钮的问题
tvOS 17 SwiftUI Alert 含 TextField 时出现额外无响应按钮的问题及解决方法
问题复现
在tvOS 17模拟器中,使用SwiftUI的Alert组件并同时添加TextField和Button时,会额外出现一个显示TextField绑定变量当前值的无响应按钮,而tvOS 16中不存在该异常。
解决方法
调整Alert内元素的顺序,将TextField放在Button之前即可解决此问题。修改后的代码如下:
Button { showAlert = true } label: { Image(systemName: "plus") } .alert("Add", isPresented: $showAlert) { TextField("Enter URL", text: $url) .keyboardType(.URL) Button("OK", action: addFunction) }
原因分析
tvOS 17对SwiftUI Alert的组件渲染逻辑做了调整,当操作按钮位于输入框之前时,系统错误地将输入框的绑定文本值解析成了一个额外的按钮控件。调整元素顺序后,系统能正确识别输入框和操作按钮的结构,避免生成多余的无响应按钮。
iOS 17相关情况
在iOS 17上测试相同代码,不会出现这个额外按钮的问题,该异常目前仅局限于tvOS 17的Alert组件。
内容的提问来源于stack exchange,提问作者R H
相关产品推荐
相关产品推荐

