2016-05-01 232 views
3

将自定义UIColor分配给UIPickerViews的背景时,出现奇怪的颜色。我已经创建了textViews和pickerViews颜色如下:UIPickerView上的奇怪自定义背景颜色Swift

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 

而对于它的价值,我有我与它自己的视图控制器模态屏幕创建日期选择器。在这种情况下,选取器会在故事板上创建。我仍然使用代码分配背景颜色,并且选取器显示正确的颜色。

回答

0

我敢肯定,这是对UIPickerView具有在它银灰色的过滤器总是一个结果(注意它是灰色的,当你把它设置为白色?)

+0

当我将它设置为白色时,它看起来就像背景的其余部分 - 它看起来不灰色。再次,我从故事板中分别创建了一个日期选择器,并且我的自定义颜色看起来与我所期望的完全一致。 (上面的灰色照片是我没有指定任何背景颜色的情况)。 – user2698617

0

这种反应不公开的原因这个问题,但我已经包含了我的决议,以防止它会帮助其他人。我为选定的行显示创建了一个标签并设置了标签的背景颜色。该标签颜色对于自定义设置是真实的。

我点了一个制作应用馅饼和文章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. 
0

在我们的例子中,我们有一个围绕UIPickerView的包装来构建自定义日期选择器。设置UITextField类的外观代理为inputView使用暗模式后,如果第一个textField变为活动状态,那么与的自定义选择器一样,但如果用户以前使用正常情况下与textField进行交互键盘 as inputView毛刺不会出现。

在我们的特定情况下加入这个技巧来包装视图解决这个问题:

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

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

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