在 iOS17 UIKit 中是否真的有任何方法可以更改/影响 iOS17 UITextField 的边框颜色(除了此处显示的 mangle 之外)?

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

这仅涉及 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个古老的问题与这里提出的微妙之处无关,提前谢谢您。

swift uitextfield calayer ios17
1个回答
0
投票

将文本字段的

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

结果:

enter image description here

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