2017-09-22 3 views
1

J'essaie de styler mon prototype de cellule de tableau intérieur UIView pour qu'il ait l'ombre et pour une personnalisation de style plus, mais pour une raison quelconque lorsque je construis le projet les changements ne sont pas appliqués.Swift @ IBDesignable/@ IBInspectable Style UIView

J'ai le code suivant pour en fichier séparé CustomView.swift

import UIKit 

@IBDesignable 
class CustomView: UIView { 



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

    @IBInspectable var shadowOpacity: Float = 0 { 
     didSet { 
      layer.shadowOpacity = shadowOpacity 
     } 
    } 

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

    @IBInspectable var shadowOffset: CGSize = CGSize(width: 0.0, height: 0.0) { 
     didSet { 
      layer.shadowOffset = shadowOffset 
     } 
    } 

    @IBInspectable var shadowColor: UIColor? = UIColor(red: 157/255, green: 157/255, blue: 157/255, alpha: 1.0) { 
     didSet { 
      layer.shadowColor = shadowColor?.cgColor 
     } 
    } 

} 

Je vois le champ dans l'attribut « inspecteur » de Xcode 9 "Attribute inspector" of Xcode 9

mais après sa construction le changement ne sont pas appliquées fondamentalement, je ne vois pas l'ombre pour la vue.

Le plus intéressant que j'utilise la même approche pour personnaliser les champs de texte ainsi que des boutons et ce code fonctionne pour UIButton/UITextField mais pas pour UIView

Est-ce que quelqu'un sait pourquoi il ne fonctionne pas pour UIView?

Toute aide grandement appréciée.

Merci.

Répondre

3

vérifier votre code:

layer.masksToBounds = cornerRadius > 0 

changement qui à:

layer.masksToBounds = false 

et assurez-vous que votre clipsToBounds est réglé sur false soit dans le code comme ceci:

clipsToBounds = false 

ou dans votre storyboard comme ça:

enter image description here

+0

salut, merci de revenir à moi. J'ai essayé votre suggestion de code et cela n'a pas fonctionné pour moi. C'est ainsi que mon story-board ressemble à ce [storyboard] (https://i.imgur.com/xcRwYbu.png) et après avoir construit le projet, c'est ce que je vois dans le simulateur pour IPhone8 [sim_result] (https: // i .imgur.com/t0XtB7p.png) pas d'ombre. Le code dans mon CustomView.swift le même plus votre changement suggéré. –

+0

dans votre capture d'écran de storyboard Je ne vois pas le drapeau ClipsToBounds, vérifiez si ce n'est pas vrai, cela devrait être faux aussi –

+0

Salut ouais, je pense que c'était un problème après avoir défini clipToBounds à false cela a commencé à fonctionner. J'apprécie vraiment votre aide. Merci –

0

Mettre à jour la fonction S'il vous plaît

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

Salut, merci de votre réponse, j'ai essayé votre suggestion de code et cela n'a pas fonctionné pour moi. C'est ainsi que mon story-board ressemble à ce [storyboard] (https://i.imgur.com/xcRwYbu.png) et après avoir construit le projet, c'est ce que je vois dans le simulateur pour IPhone8 [sim_result] (https: // i .imgur.com/t0XtB7p.png) pas d'ombre. Le code dans mon CustomView.swift le même plus votre changement suggéré. –