这仅涉及 iOS 17。我可以绕过并实现这样的目标的唯一方法是
所以
///True™ iOS look of the border, and you can change the color
class FixedUITextField: UITextField {
var completed: Bool = true {
didSet {
fakeLayer.borderColor = completed ? rememberDefaultColor : UIColor.red.cgColor
}
}
private var rememberDefaultColor: CGColor? = UIColor.gray.cgColor
private lazy var fakeLayer: CALayer = {
let v = RepairedCALayer()
for found in layer.sublayers ?? [] {
if found.borderWidth > 0 {
layer.insertSublayer(v, above: found)
v.backgroundColor = found.backgroundColor
v.borderColor = found.borderColor
v.borderWidth = found.borderWidth
v.cornerRadius = found.cornerRadius
v.cornerCurve = found.cornerCurve
print("found and covered")
rememberDefaultColor = found.borderColor
return v
}
}
// defaults ICO disaster
v.backgroundColor = UIColor.systemBackground.cgColor
v.borderColor = UIColor.blue.cgColor
v.borderWidth = 1.0 / UIScreen.main.scale
v.cornerRadius = 4.0
v.cornerCurve = .circular
layer.addSublayer(v)
return v
}()
override func layoutSubviews() {
super.layoutSubviews()
fakeLayer.frame = bounds
}
}
这仅涉及 iOS 17。我是否遗漏了一些非常明显的东西?
这仅涉及 iOS 17。关于这种时间浪费的更多问题......
出于某种原因,我找不到 _UlTextFieldRoundedRectBackgroundViewNeue 这似乎是罪魁祸首。它就在 Xcode 中,单击并查看它,但我找不到任何名为该名称的内容。
奇怪:采用上面的代码,而不是添加假图层,只需更改找到的图层的颜色。你一定会想!我一生都无法弄清楚他们在视图周期中的哪个位置设置了它。任何我改变颜色的地方,“他们”都会把它改回来!我能让它坚持下去的唯一方法就是使用计时器,看在上帝的份上——试一试。
这仅涉及 iOS 17。我是否遗漏了一些非常明显的东西? - 有没有办法按原样更改 UITextField 的边框颜色?
如果您是新的SO用户或没有经验的程序员,请阅读本文,谢谢:不要点击“重复”,因为这100个古老的问题与这里提出的微妙之处无关,提前谢谢您。
将文本字段的
.borderStyle
设置为 .roundedRect
,然后在文本字段的 .layer
本身上设置所需的边框属性:
class RedTextFieldVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let tf = UITextField()
tf.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(tf)
let g = view.safeAreaLayoutGuide
NSLayoutConstraint.activate([
tf.widthAnchor.constraint(equalToConstant: 240.0),
tf.topAnchor.constraint(equalTo: g.topAnchor, constant: 20.0),
tf.centerXAnchor.constraint(equalTo: g.centerXAnchor),
])
tf.borderStyle = .roundedRect
tf.layer.borderColor = UIColor.red.cgColor
tf.layer.borderWidth = 1.0 / UIScreen.main.scale
tf.layer.cornerRadius = 4.0
tf.layer.cornerCurve = .circular
tf.text = "Hello Red Border"
}
}
结果: