Je voudrais savoir comment utiliser la propriété UIView
clipsToBounds
.
La documentation officielle dit ce qui suit:
clipsToBounds
propertyUne valeur booléenne qui détermine si les sous-vues sont limitées au limites de la vue.
Discussion
Si vous définissez cette valeur surYES
, les sous-vues sont tronquées en limites du récepteur. Si défini àNO
, les sous-vues dont les cadres s'étendent au-delà des limites visibles du récepteur ne sont pas coupées. Le défaut la valeur estNO
.
Mais je ne comprends pas ce que cela signifie exactement. Comment devrais-je utiliser clipsToBounds
? Quelles sont les conséquences de définir exactement cette propriété sur YES
? Ou à NO
?
Si mon superview est une boîte mesurant 10 unités de chaque côté et que ma sous-vue a une largeur de 20 unités, avec clipsToBounds
défini sur YES
, je ne verrai que la partie de la sous-vue qui correspond à ses limites. Sinon, si clipsToBounds
est défini sur NO
, je verrai la sous-vue entière, même les parties extérieures à la vue d'ensemble (en supposant que nous soyons toujours à l'écran).
A titre d'exemple visuel, considérons les vues suivantes configurées sur le storyboard:
Ceci est une UIView
blanche, une étiquette dans le coin supérieur gauche avec un simple "1" ou "2" afin que je puisse en discuter en tant que view1
ou view2
. De plus, la vue en noir a la même taille que la vue en blanc, mais son origine est au centre de la vue en blanc.
Dans la méthode viewDidLoad
du contrôleur de vue, nous avons le code suivant:
- (void)viewDidLoad {
[super viewDidLoad];
self.view1.clipsToBounds = YES;
self.view2.clipsToBounds = NO;
}
override func viewDidLoad() {
super.viewDidLoad()
self.view1.clipsToBounds = true
self.view2.clipsToBounds = false
}
Lorsque nous exécutons le code et examinons dans le simulateur ou sur le périphérique, nous obtenons les résultats suivants:
Ainsi, même si ces vues sont configurées de manière identique (à l'exception de clipsToBounds
), elles ont un aspect différent. C'est ce que clipsToBounds
fait. Si vous le définissez sur YES
, vous obtiendrez le premier résultat, tandis que si vous le définissez sur NO
, vous obtiendrez le résultat final.
Si nous déboguons la hiérarchie des vues, nous pouvons voir plus clairement que les boîtes noires s'étendent bien au-delà des frontières de la vue blanche, mais seule la vue 2 le montre lorsque l'application est en cours d'exécution:
uiview et textfield avec shadow Swift 4
self.txtCurrent.layer.shadowOpacity = 0.5
self.txtCurrent.layer.shadowOffset = CGSize(width: 1.0, height: 1.0)
self.txtCurrent.layer.shadowRadius = 5.0
self.txtCurrent.layer.shadowColor = UIColor.black.cgColor
self.txtCurrent.layer.masksToBounds = false
uiview avec ombre
self.yourview.layer.shadowOpacity = 0.5
self.yourview.layer.shadowOffset = CGSize(width: 1.0, height: 1.0)
self.yourview.layer.shadowRadius = 5.0
self.yourview.layer.shadowColor = UIColor.black.cgColor
self.yourview.layer.masksToBounds = false