iOS项目未修改DatePicker尺寸却出现UIPickerView Frame错误的解决方法
iOS 16下DatePicker出现
[UIPickerView setFrame:]尺寸错误的修复方案 在Xcode 14、iOS 16环境中使用SwiftUI的wheel样式DatePicker时,即便未手动修改组件尺寸,也可能触发[UIPickerView setFrame:]: invalid size {320, 216} pinned to {320, 216}的错误。以下是几种可行的修复方式:
修复方式
添加明确的尺寸约束
给DatePicker直接指定合理的宽高,避免系统自动计算尺寸时出现约束冲突:DatePicker("", selection: $trip.date, in: Date().getDatePickerRange, displayedComponents: .date) .datePickerStyle(.wheel) .labelsHidden() .frame(width: 300, height: 200) // 手动指定尺寸用容器视图包裹DatePicker
将DatePicker放入VStack、HStack或Form等容器中,让容器负责布局管理,消除直接与父视图的约束冲突:VStack { DatePicker("", selection: $trip.date, in: Date().getDatePickerRange, displayedComponents: .date) .datePickerStyle(.wheel) .labelsHidden() }检查日期范围有效性
确认getDatePickerRange方法返回的日期范围是合法的(起始日期≤结束日期),无效的日期范围可能间接引发布局异常。
问题原因
这是iOS 16中SwiftUI wheel样式DatePicker的已知布局bug,系统自动计算组件尺寸时,容易与父视图的布局约束产生冲突,通过手动指定尺寸或容器托管布局的方式可以规避该问题。
内容的提问来源于stack exchange,提问作者Kevin Bertrand
相关产品推荐
相关产品推荐

