如何更改UIDatePicker的线条颜色

时间:2015-11-18 19:05:09

标签: ios swift datepicker styling uidatepicker

我的一个ViewControllers中有一个UIDatePicker。如您所见,背景很暗。

Image of my UIDatePicker

我已经设法改变的是文本颜色为白色。我无法改变的是所选日期上下两行的颜色。它始终保持默认的深灰色。有没有人有一个代码剪断来实现这些线的着色?

5 个答案:

答案 0 :(得分:10)

huniser_suraj答案是正确的,只需使用额外的检查以便将来的更改,这就是我使用它的方式,对于UIPickerView& UIDatePicker分别为:

    for subview in self.picker.subviews {

        if subview.frame.height == 1 {

            subview.backgroundColor = UIColor.whiteColor()
        }
    }

    if let pickerView = self.datePicker.subviews.first {

        for subview in pickerView.subviews {

            if subview.frame.height == 1 {

                subview.backgroundColor = UIColor.whiteColor()
            }
        }
    }

iOS 10更新

从iOS 10开始,这已不再适用了,正如一些评论中提到的那样,即查找子视图&到达他们的工作,但设置背景颜色不再工作。 我为此做了另一个肮脏的解决方案,我设置了边框颜色的边框。

    for subview in self.picker.subviews {

        if subview.frame.height <= 5 {

            subview.backgroundColor = UIColor.white
            subview.tintColor = UIColor.white
            subview.layer.borderColor = UIColor.white.cgColor
            subview.layer.borderWidth = 0.5            }
    }

    if let pickerView = self.datePicker.subviews.first {

        for subview in pickerView.subviews {

            if subview.frame.height <= 5 {

                subview.backgroundColor = UIColor.white
                subview.tintColor = UIColor.white
                subview.layer.borderColor = UIColor.white.cgColor
                subview.layer.borderWidth = 0.5
            }
        }
        self.datePicker.setValue(UIColor.white, forKey: "textColor")
    }

答案 1 :(得分:2)

首先,Apple文档说,关于Date Pickers,&#34;您无法自定义日期选择器的外观。&#34;

话虽如此,以下代码正是您所需要的。我理解它并不是最优雅的代码,但在这里它是

datePicker.subviews[0].subviews[1].backgroundColor = UIColor.redColor()
datePicker.subviews[0].subviews[2].backgroundColor = UIColor.redColor()

UIDatePicker有一个子视图UIDatePickerView,它有3个子视图,后者中有2个是指示选择行的两行。

答案 2 :(得分:1)

可以通过IB以非常简单的方式完成。 只需将2个UiView放置为高度= 1,宽度等于UIDatePicker。 然后垂直和水平地使用UIDatePicker对中。对于上面一行,将垂直偏移设置为18,将另一个设置为-18。 完成!

答案 3 :(得分:0)

我必须更改datePicker的高度限制,并且此@kex代码的cus对我不起作用。所以我修改了它:(适用于Swift 5和iOS 12)

if let _pickerView = self.datePicker.subviews.first {
    for _subview in _pickerView.subviews {
        if (_subview.backgroundColor != nil) {
            _subview.backgroundColor = UIColor.white
            _subview.tintColor = UIColor.white
            _subview.layer.borderColor = UIColor.white.cgColor
            _subview.layer.borderWidth = 1
        }
    }
}

答案 4 :(得分:0)

是的,这是不安全的方法。但作为选择,为什么不呢?

 if #available(iOS 13.0, *) {
    datePicker.setValue(UIColor.red, forKey: "magnifierLineColor")
    }

更安全的解决方案:

extension UIView {

 func findViews<T: UIView>(subclassOf: T.Type) -> [T] {
    return recursiveSubviews.compactMap { $0 as? T }
 }

 var recursiveSubviews: [UIView] {
    return subviews + subviews.flatMap { $0.recursiveSubviews }
 }

}

self.datePicker.findViews(subclassOf: UIView.self)
            .makeIterator()
            .lazy
            .filter({$0.bounds.height <= 1 && $0.bounds.width == self.datePicker.bounds.width})
            .prefix(2)
            .forEach({$0.backgroundColor = UIColor.red})