ios UIPickerView Swift上奇怪的自定义背景色

q9rjltbz  于 2023-02-14  发布在  iOS
关注(0)|答案(7)|浏览(289)

我在为UIPickerViews的背景分配自定义UIColor时得到了奇怪的颜色。我为textView和pickerViews创建了一个颜色,如下所示:

let myTextViewBackgroundColor = UIColor(red: 192.0/255.0, green: 255.0/255.0, blue: 255.0/255.0, alpha: 0.35)

我把它赋值为:

myTextView.backgroundColor = myTextViewBackgroundColor
keywordPicker.backgroundColor = myTextViewBackgroundColor

它看起来是这样的:

正如您所看到的,textView的颜色和picker的颜色不同,这种差异在设备上似乎比在此快照中更明显,但自定义颜色看起来很模糊,几乎像是与默认的灰色背景混合在一起。
如果我注解掉上面的pickerView颜色项,我会得到一个灰色背景:

如果我选择一个标准的UIColor,它看起来工作正常。UIColor. yellowColor在这个例子中。如果我选择白色,看起来也不错。

我在代码中创建pickerView,并将其分配给一个没有分配背景色的textField。

var keywordPicker : UIPickerView?

keywordPicker = UIPickerView()
keywordPicker?.delegate = self
keywordPicker?.dataSource = self

keywordsForItemTextField.inputView = keywordPicker
keywordPicker.backgroundColor = myTextViewBackgroundColor

值得一提的是,我创建了一个日期选择器,作为一个模态屏幕,它有自己的视图控制器。在这种情况下,选择器是在故事板上创建的。我仍然用代码分配背景颜色,选择器显示正确的颜色。

mgdq6dx1

mgdq6dx11#

tkanzakic的回答终于允许我更改UIDatePicker的背景颜色。
以下是Swift 4版本:

class CustomDatePicker: UIDatePicker {

    var customBackgroundColor = UIColor.black

    override func willMove(toWindow newWindow: UIWindow?) {
        super.willMove(toWindow: newWindow)

        if newWindow != nil {
            inputView?.backgroundColor = customBackgroundColor
        }
    }
}

根据需要更改customBackgroundColor属性。

ttvkxqim

ttvkxqim2#

我敢肯定这是UIPickerView总是有银灰色过滤器的结果(注意当你把它设置为白色时它是如何变灰的?)

juud5qan

juud5qan3#

此响应不公开问题的原因,但我已包含我的解决方案,以防对其他人有所帮助。我为所选行显示创建了一个标签,并设置了标签的背景色。此标签颜色与自定义设置相同。
我给予Making App Pie和文章https://makeapppie.com/2014/10/21/swift-swift-formatting-a-uipickerview/,这是我的灵感来源。设置背景为白色:

keywordPicker?.backgroundColor = UIColor.whiteColor()

我还添加了一个边框,使选择器看起来像我创建的textView:

keywordPicker?.layer.borderColor = UIColor(colorLiteralRed: 212.0/255.0, green: 212.0/255.0, blue: 212.0/255.0, alpha: 1.0).CGColor
    keywordPicker?.layer.borderWidth = 1.0
    keywordPicker?.layer.cornerRadius = 7.0
    keywordPicker?.layer.masksToBounds = true

设置标签:

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {

    let pickerLabel = UILabel()
    var titleData : String = String()

    if pickerView == keywordPicker {
        titleData = crsuKeywordPickerList![row]
    }
    pickerLabel.text = titleData

    pickerLabel.backgroundColor = myPickerBackgroundColor
    pickerLabel.textAlignment = .Center

    return pickerLabel

}//pickerView:viewForRow:...

The result:

As a second option as discussed above, if you instantiate the picker on the storyboard this problem does not appear.
unhi4e5o

unhi4e5o4#

在我们的例子中,我们有一个围绕UIPickerView的 Package 器来构建一个自定义的日期选择器。在设置UITextField类的外观代理来使用inputView的暗模式之后,如果第一个激活的textField是一个带有自定义选择器的inputView,我们会遇到同样的问题。但如果用户之前使用 * 普通键盘 * 与textField交互,如inputView,则不会出现毛刺。
在我们的特定案例中,将此技巧添加到 Package 器视图中可以解决以下问题:

- (void)willMoveToWindow:(UIWindow *)newWindow
{
    [super willMoveToWindow:newWindow];

    if (newWindow) {
        self.pickerView.backgroundColor = self.colorPalette.inputViewBackgroundColor;
    }
}

我们还尝试在willMoveToSuperview:方法中设置颜色,但不起作用。

ulydmbyx

ulydmbyx5#

写你的背景颜色改变代码内:-

func textFieldDidBeginEditing(_ textField: UITextField) { 

    if textField == self.tourtextfieldtextField {
        //for background color of picker
        datePickerView.backgroundColor = .red
        //text color of picker
        datePickerView.setValue( colorLiteral(red: 0, green: 0.5529411765, blue: 0.537254902, alpha: 1), forKeyPath: "textColor")
        datePickerView.setValue(0.8, forKeyPath: "alpha")
    }
}
q7solyqu

q7solyqu6#

swift 4.2 /x代码10:

需要在主线程中设置背景颜色:

DispatchQueue.main.async {
keywordPicker.backgroundColor = myTextViewBackgroundColor
}
tzcvj98z

tzcvj98z7#

要删除UIPickerView上的silvery-grey覆盖层,您可以添加以下内容。

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {

    for subview in pickerView.subviews {
        subview.backgroundColor = .clear
    }
}

相关问题