iOS14下修改inline样式UIDatePicker内部背景与边框颜色问题
iOS14+ UIDatePicker .inline样式背景修改方案
问题原因
iOS 14及以上版本中,.inline样式的UIDatePicker内部会自动嵌套一层系统自带的灰色背景子视图,直接设置UIDatePicker本身的backgroundColor无法修改这层内置视图的属性,因此会出现自定义背景不生效的问题。
可直接复用的修改代码
你只需要在原有picker初始化的闭包中补充几行遍历子视图修改背景的代码即可,修改后的完整代码如下:
fileprivate let picker: UIDatePicker = { let picker = UIDatePicker() picker.translatesAutoresizingMaskIntoConstraints = false picker.datePickerMode = .time picker.preferredDatePickerStyle = .inline picker.layer.borderWidth = 0 picker.minuteInterval = 15 picker.backgroundColor = .clear picker.overrideUserInterfaceStyle = .light // 新增代码:遍历修改内置背景色 if let backgroundView = picker.subviews.first?.subviews.first { backgroundView.backgroundColor = .clear // 需要白色就替换为.white backgroundView.layer.cornerRadius = 0 // 不需要系统默认圆角也可自行调整 } return picker }()
适配UITableViewCell使用的注意点
- 如果cell复用后picker背景出现异常,可以把上述背景修改的逻辑放到cell的
layoutSubviews()方法中执行,保证每次布局更新都能命中背景视图 - 无需修改picker的层级结构,不会影响原有选择功能的正常使用
- 若后续系统版本更新调整了
UIDatePicker的视图结构,只需要对应调整遍历的层级即可,不需要大幅修改代码
内容的提问来源于stack exchange,提问作者Scholte47
相关产品推荐
相关产品推荐

