[Ios] Aumentando il raggio dell'angolo di UITextField rimuove la sua ombra


Answers

Question

Ho un UITextField con codice personalizzato per controllare il raggio dell'angolo e il colore del segnaposto e altre proprietà differenti. Inoltre, ho un protocollo con estensione per eliminare l'ombra da qualsiasi elemento dell'interfaccia utente.

Il problema è: ogni volta che aumento il raggio dell'angolo del campo di testo, perdo l'ombra. Finché il raggio dell'angolo è 0, ho ancora un'ombra.

E questo mostra al debugger quando aumento l'angolo di Radius e perdo l'ombra:

setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key height

Ecco il mio protocollo che ho implementato per eliminare l'ombra:

import UIKit

protocol DropShadow {}

extension DropShadow where Self: UIView {

    func addDropShadow() {
        layer.shadowColor = UIColor.black.cgColor
        layer.shadowOpacity = 0.7
        layer.shadowOffset = CGSize(width: 0, height: 4)
        layer.shadowRadius = 3
    }
}

Ed ecco la mia classe personalizzata per UITextField:

import UIKit

@IBDesignable
class FancyTextField: UITextField, DropShadow {

    @IBInspectable var cornerRadius: CGFloat = 0 {
        didSet {
            layer.cornerRadius = cornerRadius
            layer.masksToBounds = cornerRadius > 0
        }
    }

    @IBInspectable var borderWidth: CGFloat = 0 {
        didSet {
            layer.borderWidth = borderWidth
        }
    }

    @IBInspectable var borderColor: UIColor? {
        didSet {
            layer.borderColor = borderColor?.cgColor
        }
    }

    @IBInspectable var bgColor: UIColor? {
        didSet {
            backgroundColor = bgColor
        }
    }

    @IBInspectable var placeHolderColor: UIColor? {
        didSet {
            let rawString = attributedPlaceholder?.string != nil ? attributedPlaceholder!.string : ""
            let str = NSAttributedString(string: rawString, attributes: [NSForegroundColorAttributeName: placeHolderColor!])
            attributedPlaceholder = str
        }
    }

}