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

时间:2016-05-01 04:27:06

标签: ios swift colors uipickerview

在将自定义UIColor分配给UIPickerViews的背景时,我得到了奇怪的颜色。我为textViews和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

这是它的样子: enter image description here 如您所见,textViews的颜色和选择器的颜色是不同的。设备上的差异似乎比此快照更明显,但自定义颜色看起来很混乱,几乎就像它与默认的灰色背景混合一样。

如果我注释掉上面的pickerView颜色项,我会得到一个灰色背景: enter image description here 如果我选择标准UIColor,它似乎正常工作。在这个例子中是UIColor.yellowColor。如果我选择白色,那看起来也不错。 enter image description here 我在代码中创建了pickerView并将其分配给没有指定背景颜色的textField。

var keywordPicker : UIPickerView?

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

keywordsForItemTextField.inputView = keywordPicker
keywordPicker.backgroundColor = myTextViewBackgroundColor

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

6 个答案:

答案 0 :(得分:0)

我很确定这是因为UIPickerView总是在它上面有银色灰色过滤器(当你将它设置为白色时注意它是灰色的吗?)

答案 1 :(得分:0)

此回复并未揭示问题的原因,但我已将我的决议包括在内以防其他人。我为选定的行显示创建了一个标签,并设置了标签的背景颜色。此标签颜色适用于自定义设置。

我对制作App Pie和文章https://makeapppie.com/2014/10/21/swift-swift-formatting-a-uipickerview/表示赞许 这是灵感。将背景设置为白色:

    keywordPicker?.backgroundColor = UIColor.whiteColor()

此外,我添加了一个边框,因此选择器看起来像我创建的textViews:

    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:

enter image description here

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

答案 2 :(得分:0)

在我们的例子中,我们在UIPickerView周围有一个包装器来构建一个自定义日期选择器。将UITextField类的外观代理设置为inputView使用暗模式后,如果变为活动的第一个textField与自定义选择器{{1}相同,则我们会遇到相同的故障但是,如果用户之前使用普通键盘作为inputView与textField进行交互,则不会出现故障。

在我们的特殊情况下,将此hack添加到包装器视图可以解决问题:

inputView

我们也尝试在- (void)willMoveToWindow:(UIWindow *)newWindow { [super willMoveToWindow:newWindow]; if (newWindow) { self.pickerView.backgroundColor = self.colorPalette.inputViewBackgroundColor; } } 方法中设置颜色,但这不起作用。

答案 3 :(得分:0)

在里面写下你的背景颜色变化代码: -

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")
    }
}

答案 4 :(得分:0)

tkanzakic的回答最终让我改变了UIDatePicker的背景颜色。

这是Swift 4版本:

  in app.yaml
  env_variables:
  MYSQL_USER: username
  MYSQL_PASSWORD: password
  MYSQL_DSN: mysql:unix_socket=/cloudsql/instancename;dbname=yourdbname

  in your script:
  $dsn=getenv('MYSQL_DSN');
  $user=getenv('MYSQL_USER');
  $pass=getenv('MYSQL_PASSWORD');
  $dbh = new PDO($dsn, $user, $pass);

根据您的喜好更改customBackgroundColor属性。

答案 5 :(得分:0)

swift 4.2 / xcode 10:

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

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