UIPickerView中UIVIew的背景颜色设置不正确

问题描述 投票:1回答:2

我正在尝试使用自定义设计实现UIPickerView。我在UIVIew里面拿了一个UIPickerView,在我的UIVIew里面贴了一个标签。我的选择器背景的颜色是黑色的,现在我正在尝试将白色背景颜色应用于UIVIew并在View中标记。但颜色并不是我想要的。我想要纯白色,但它会变灰。任何人都可以帮助我吗?

这是我的代码和输出:

if pickerView == pkr1 {
    let myView = UIView(frame: CGRect(x: 5, y: 0, width: pickerView.bounds.width - 10, height: Utilities.isDeviceiPad() ? 80.0 : 60.0))
    myView.backgroundColor = UIColor.white
    myView.isOpaque = false
    let myLabel = UILabel(frame: CGRect(x: 5, y: 0, width: myView.bounds.width - 10, height: myView.frame.height))
    myLabel.text = arrTemp[row]
    //  myLabel.center.y = myView.center.y
    myLabel.textAlignment = .center
    myLabel.numberOfLines = 2
    myLabel.backgroundColor = UIColor.white
    myLabel.alpha = CGFloat(1)
    myLabel.lineBreakMode = NSLineBreakMode.byTruncatingTail

    myView.addSubview(myLabel)
    return myView
}

enter image description here

输出:

enter image description here

ios iphone swift uipickerview picker
2个回答
0
投票

请通过以下方法在选择器视图中添加您的视图并检查它...希望它能工作..

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

   let myView = UIView(frame: CGRect(x: 5, y: 0, width: pickerView.bounds.width - 10, height: Utilities.isDeviceiPad() ? 80.0 : 60.0))
                        myView.backgroundColor = UIColor.white
                        myView.isOpaque = false
                        let myLabel = UILabel(frame: CGRect(x: 5, y: 0, width: myView.bounds.width - 10, height: myView.frame.height))
                        myLabel.text = arrTemp[row]
                        //  myLabel.center.y = myView.center.y
                        myLabel.textAlignment = .center
                        myLabel.numberOfLines = 2
                        myLabel.backgroundColor = UIColor.white
                        myLabel.alpha = CGFloat(1)
                        myLabel.lineBreakMode = NSLineBreakMode.byTruncatingTail

                        myView.addSubview(myLabel)
                        return myView

}

0
投票

所选视图透明的原因是,包含所有内容的UIPickerView子视图使用CAGradientLayer作为蒙版来实现深度效果。出于某种原因,Apple决定使选定的视图也透明。我们不能简单地摆脱那个面具,因为我们会失去那种奇特的效果。所以我们需要弄清楚有关该梯度的更多信息。

这是这个渐变的样子。我已添加了Alpha通道值,因此您可以看到此渐变的行为方式。

UIPickerView gradient layer mask

正如你所看到的,它有6种颜色,除了中间的两个值外,一切都很好。他们是0.8而不是1.0,这使你选择的视图透明。

这是一个非常糟糕的方法,我强烈建议不要这样做,但如果你需要使你选择的项目不透明,你可以简单地创建你UIPickerView的子类并改变这样的渐变。

class MyPickerView: UIPickerView {

    override init(frame: CGRect) {
        super.init(frame: frame)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        self.changeGradientLayer()
    }

    func changeGradientLayer() {
        guard let sublayers = self.subviews.first?.layer.sublayers else { return }

        for case let sublayer as CAGradientLayer in sublayers {
            sublayer.colors = [UIColor.black.withAlphaComponent(0).cgColor,
                               UIColor.black.withAlphaComponent(0.71).cgColor,
                               UIColor.black.withAlphaComponent(1.0).cgColor,
                               UIColor.black.withAlphaComponent(1.0).cgColor,
                               UIColor.black.withAlphaComponent(0.71).cgColor,
                               UIColor.black.withAlphaComponent(0).cgColor]
        }
    }

}

希望它能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.