Swift 4中如何将UIDatePicker定位至屏幕底部(同UIPickerView位置)
让UIDatePicker固定在屏幕底部的解决方案
嗨,我来帮你搞定这个问题!要让UIDatePicker像UIPickerView一样始终贴在屏幕底部且占满全屏宽度,优先用Auto Layout实现会更靠谱——毕竟手动设置frame很难适配不同屏幕尺寸和旋转场景。下面是具体的解决办法:
方法一:Auto Layout(推荐方案)
你需要先关闭datePicker的自动约束转换,再手动添加底部、左右对齐的约束,高度可以按你的需求固定,或者用系统默认高度:
let datePicker: UIDatePicker = UIDatePicker() datePicker.datePickerMode = .date datePicker.timeZone = NSTimeZone.local datePicker.backgroundColor = UIColor.white datePicker.addTarget(self, action: #selector(GradingController.datePickerValueChanged(_:)), for: .valueChanged) // 必须关闭自动约束转换,否则会和我们手动加的约束冲突 datePicker.translatesAutoresizingMaskIntoConstraints = false self.view.addSubview(datePicker) // 添加约束:底部贴紧屏幕、左右全屏、高度固定200 NSLayoutConstraint.activate([ datePicker.bottomAnchor.constraint(equalTo: self.view.bottomAnchor), datePicker.leadingAnchor.constraint(equalTo: self.view.leadingAnchor), datePicker.trailingAnchor.constraint(equalTo: self.view.trailingAnchor), datePicker.heightAnchor.constraint(equalToConstant: 200) ])
为什么选Auto Layout?
- 自动适配所有屏幕尺寸(从SE到Pro Max都没问题)
- 屏幕旋转时会自动调整位置,不用额外写代码处理
- 代码更健壮,不会因为view的frame动态变化导致布局错乱
方法二:手动计算Frame(仅适合固定场景)
如果你暂时不想用Auto Layout,也可以通过计算屏幕高度来设置正确的y值,让picker固定在底部:
let datePicker: UIDatePicker = UIDatePicker() datePicker.datePickerMode = .date let pickerHeight: CGFloat = 200 // 计算y坐标:屏幕总高度减去picker的高度,就能贴在底部 datePicker.frame = CGRect( x: 0, y: self.view.frame.height - pickerHeight, width: self.view.frame.width, height: pickerHeight ) datePicker.timeZone = NSTimeZone.local datePicker.backgroundColor = UIColor.white datePicker.addTarget(self, action: #selector(GradingController.datePickerValueChanged(_:)), for: .valueChanged) self.view.addSubview(datePicker)
⚠️ 注意:这种方式在屏幕旋转或者view的frame动态变化时,picker的位置会出错,需要额外监听布局变化来更新frame,所以还是优先用Auto Layout更省心~
内容的提问来源于stack exchange,提问作者user979331
相关产品推荐
相关产品推荐

