4 votes

Comment ajouter une ombre sur un champ UITextField avec des coins ronds ?

Je veux réaliser une ombre sur UITextField avec des coins arrondis comme dans l'image ci-dessous : enter image description here

Mon code est le suivant :

    override func viewDidLoad() {
       super.viewDidLoad()
       textField.layer.cornerRadius =             textField.frame.size.height / 2
       textField.layer.borderWidth = 1.0
       textField.layer.borderColor = UIColor(white: 0.5, alpha: 0.3).cgColor
       textField.layer.shadowOpacity = 1
       textField.layer.shadowRadius = 4.0
       textField.layer.shadowColor = UIColor.black.cgColor
    }

mais, je pense qu'il manque quelque chose...

Sortie : enter image description here

Merci d'avance !

6voto

Joe Points 5340

Essayez le code ci-dessous pour obtenir un effet d'ombre sur roundRect champ de texte.

    //Basic texfield Setup 
    textField.borderStyle = .none
    textField.backgroundColor = UIColor.groupTableViewBackground // Use anycolor that give you a 2d look.

    //To apply corner radius
    textField.layer.cornerRadius = textField.frame.size.height / 2

    //To apply border
    textField.layer.borderWidth = 0.25
    textField.layer.borderColor = UIColor.white.cgColor

    //To apply Shadow
    textField.layer.shadowOpacity = 1
    textField.layer.shadowRadius = 3.0
    textField.layer.shadowOffset = CGSize.zero // Use any CGSize
    textField.layer.shadowColor = UIColor.gray.cgColor

    //To apply padding
    let paddingView : UIView = UIView(frame: CGRect(x: 0, y: 0, width: 20, height: textField.frame.height))
    textField.leftView = paddingView
    textField.leftViewMode = UITextFieldViewMode.always

Nota: Pour une raison quelconque textField.borderStyle = .none ne prend pas effet même en fixant le code dans viewWillLayoutSubviews() o viewDidLayoutSubviews() Je vous recommande donc de définir borderStyle dans le champ de texte du storyBoard. Attributes inspector .

enter image description here

Sortie du dispositif réel :

enter image description here

Pour obtenir un effet d'ombre portée : (comme les autres SO poteaux)

   textField.layer.borderColor = UIColor.black.withAlphaComponent(0.25).cgColor
   textField.layer.shadowOffset = CGSize(width: 0, height: 3)
   textField.layer.shadowColor = UIColor.black.cgColor //Any dark color

Sortie :

enter image description here

2voto

Siyavash Points 603

Vous pouvez ajouter cette extension et ensuite utiliser la méthode "addShadow" pour ajouter une ombre à vos champs de texte, étiquettes, vues de texte, etc...

extension UIView {    
func addShadow(shadowColor: CGColor = UIColor.black.cgColor,
                   shadowOffset: CGSize = CGSize(width: 1.0, height: 2.0),
                   shadowOpacity: Float = 0.4,
                   shadowRadius: CGFloat = 3.0) {
        layer.shadowColor = shadowColor
        layer.shadowOffset = shadowOffset
        layer.shadowOpacity = shadowOpacity
        layer.shadowRadius = shadowRadius
        layer.masksToBounds = false
    }
}

1voto

Dixit Akabari Points 1179

Essayez ceci :

textField.layer.masksToBounds = false
textField.layer.shadowRadius = 4.0
textField.layer.shadowColor = UIColor.black.cgColor
textField.layer.shadowOffset = CGSize(width: 1.0, height: 1.0)
textField.layer.shadowOpacity = 1.0

0voto

dahiya_boy Points 5065

Utilisez le code ci-dessous

    textfield.layer.cornerRadius = textfield.frame.size.height/2
    textfield.clipsToBounds = false
    textfield.layer.shadowOpacity=0.4
    textfield.layer.shadowOffset = CGSize(width: 0, height: 0)

OutPut :

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X