iOS 17.1中SwiftUI DatePicker点击无响应,仅长按可打开的问题求助
解决iOS 17.1中DatePicker点击无响应、需长按才能打开的问题
你的问题核心在于父视图的allowsHitTesting设置与iOS 17.1的事件传递机制变化冲突,导致DatePicker的点击事件被拦截。以下是具体解决思路和修改方案:
方案1:缩小allowsHitTesting的作用范围
当前你将allowsHitTesting加在了整个外层VStack上,这会影响内部所有子视图的交互响应。建议只给需要禁用交互的组件(比如标题文本)添加该设置,让DatePicker所在区域不受限制:
VStack(alignment: .leading){ Text("Date".localized()) .applyFont(style: .Medium, size: 18) .foregroundColor(Colors.grayLight) .allowsHitTesting(!(eventTransaction != nil && eventTransaction?.by != UserDefaults.userID)) // 仅给Text添加该限制 HStack{ let lastYear = Calendar.current.date(byAdding: .year, value: -1, to: Date()) ?? Date() if let date = checkLowerBound(){ DatePicker("",selection:$selectedDate, in: date...Date(), displayedComponents: [.date]) .frame(width: 100) }else{ DatePicker("",selection:$selectedDate, in: lowestDate...Date(), displayedComponents: [.date]) .frame(width: 100) } Spacer() } .padding(.horizontal, 10) } .cardProperty() // 移除VStack上的allowsHitTesting设置
方案2:强制DatePicker的交互响应
如果必须保留父视图的allowsHitTesting设置,可以给DatePicker单独设置allowsHitTesting(true),强制它响应用户点击:
// 两个DatePicker都需要添加该设置 DatePicker("",selection:$selectedDate, in: date...Date(), displayedComponents: [.date]) .frame(width: 100) .allowsHitTesting(true) // 强制开启交互
方案3:确保DatePicker的点击区域足够
iOS 17.1可能对视图点击区域的检测更严格,你可以给DatePicker添加contentShape来明确点击范围,避免因frame设置导致的点击失效:
DatePicker("",selection:$selectedDate, in: date...Date(), displayedComponents: [.date]) .frame(width: 100) .contentShape(Rectangle()) // 将点击区域扩大为整个frame范围
优先尝试方案1,它从根源上避免了父视图对DatePicker交互的干扰,是最合理的解决方式。
内容的提问来源于stack exchange,提问作者Hardik Thakkar
相关产品推荐
相关产品推荐

