iOS 16+中UIDatePicker显示异常:日历底部被截断问题求助
解决iOS 16及以上UIDatePicker作为InputView底部截断问题
在iOS 16及以上版本中,将inline样式的UIDatePicker直接设置为输入框的inputView时,会出现底部截断的问题——这是因为系统默认的inputView高度无法适配该样式选择器的完整尺寸。可以通过以下方式修复:
解决方案步骤
- 不要直接将
UIDatePicker赋值给inputView,而是将其包裹在一个UIView容器中,容器高度设置为选择器的固有内容高度 - 针对iOS 16及以上版本,手动通过固有尺寸约束保证选择器完整显示
修改后的代码示例
let datePickerView: UIDatePicker = UIDatePicker() datePickerView.datePickerMode = .date if #available(iOS 14, *) { datePickerView.preferredDatePickerStyle = .inline } // 用容器视图包裹日期选择器 let pickerContainer = UIView() pickerContainer.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: datePickerView.intrinsicContentSize.height) pickerContainer.addSubview(datePickerView) // 设置约束让选择器填满容器 datePickerView.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ datePickerView.topAnchor.constraint(equalTo: pickerContainer.topAnchor), datePickerView.leadingAnchor.constraint(equalTo: pickerContainer.leadingAnchor), datePickerView.trailingAnchor.constraint(equalTo: pickerContainer.trailingAnchor), datePickerView.bottomAnchor.constraint(equalTo: pickerContainer.bottomAnchor) ]) sender.inputView = pickerContainer datePickerView.addTarget(self, action: #selector(MyViewController.datePickerValueChangedNew(sender:)), for: .valueChanged)
原理说明
inline样式的UIDatePicker在iOS 16+中固有高度比旧版本更高,直接作为inputView时系统不会自动调整高度适配。通过包裹在容器中并基于选择器的固有内容尺寸设置容器大小,就能保证日历组件完整显示。
内容的提问来源于stack exchange,提问作者Sagar Zala
相关产品推荐
相关产品推荐

