UIColor无法使用RGBA值的问题

30

我正在尝试使用以下代码(RGBA值)更改UITextField中的文本颜色,但它只显示为白色或透明色,因为背景本身也是白色。

passwordTextField.textColor = UIColor(red: CGFloat(202.0), green: CGFloat(228.0), blue: CGFloat(230.0), alpha: CGFloat(100.0))

passwordTextField.returnKeyType = UIReturnKeyType.Done
passwordTextField.placeholder = "Password"
passwordTextField.backgroundColor = UIColor.clearColor()
passwordTextField.borderStyle = UITextBorderStyle.RoundedRect
passwordTextField.font = UIFont(name: "Avenir Next", size: 14)
passwordTextField.textAlignment = NSTextAlignment.Center
passwordTextField.secureTextEntry = true

202.0/255.0, 228.0/255.0, 230.0/255.0等值应该在0.01.0之间。 - holex
6个回答

81

UIColor的RGB值在0到1之间(详见文档“指定为从0.0到1.0的值”)

你需要将你的数字除以255:

passwordTextField.textColor = UIColor(red: CGFloat(202.0/255.0), green: CGFloat(228.0/255.0), blue: CGFloat(230.0/255.0), alpha: CGFloat(1.0))

另外,您不需要创建CGFloats:

passwordTextField.textColor = UIColor(red:202.0/255.0, green:228.0/255.0, blue:230.0/255.0, alpha:1.0)

2
两年后,这仍然是唯一的方法!令人惊讶的是,在其他地方很少提到! - Ivan Venediktov

10

使用 convenience init(像专业人士一样编码)

步骤 1

extension UIColor {
    convenience init(r: CGFloat, g: CGFloat, b: CGFloat) {
        self.init(red: r/255, green: g/255, blue: b/255, alpha: 1)
    }
}

使用方法

//let color = UIColor(red: 202/255, green: 228/255, blue: 230/255, alpha: 1) ☠️
let color = UIColor(r: 202, g: 228, b: 230) // 

2
只有一步? :P - J. Doe

3

尝试使用这个代替:

passwordTextField.textColor = UIColor(red: 0.792, green: 0.894, blue: 0.901, alpha: 1.0

始终填入替换值。202/255 = 0.792


2

红色、绿色、蓝色和透明度应该在0.0到1.0之间。


1
正如其他人所提到的,UIColor 组件在 0.0 ~ 1.0 的范围内进行了归一化处理(我认为宽色域可能是例外,但还没有研究过)。 UIColor 类的一个方便的 扩展 可以让您使用 0~255 范围内的值(例如从各种检查器和图像编辑工具获取的值)。
import UIKit

extension UIColor {

    convenience init(
        redByte   red:UInt8,
        greenByte green:UInt8,
        blueByte  blue:UInt8,
        alphaByte alpha:UInt8
        ) {
        self.init(
            red:   CGFloat(red  )/255.0,
            green: CGFloat(green)/255.0,
            blue:  CGFloat(blue )/255.0,
            alpha: CGFloat(alpha)/255.0
        )
    }
}

0

UIColor提供了方便的方法,可以从整数或十六进制值创建颜色。

extension UIColor {


    convenience init(red: Int, green: Int, blue: Int, alpha: CGFloat) {
        assert(red >= 0 && red <= 255, "Invalid red component")
        assert(green >= 0 && green <= 255, "Invalid green component")
        assert(blue >= 0 && blue <= 255, "Invalid blue component")

        self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: alpha)
    }



    convenience init(rgb: Int, alpha: CGFloat = 1) {
        self.init(
            red: (rgb >> 16) & 0xFF,
            green: (rgb >> 8) & 0xFF,
            blue: rgb & 0xFF,
            alpha: alpha
        )
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接