web-dev-qa-db-fra.com

Comment fonctionne clipToBounds?

Je voudrais savoir comment utiliser la propriété UIViewclipsToBounds.

La documentation officielle dit ce qui suit:

clipsToBoundsproperty

Une 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 sur YES, 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 est NO.

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?

92
Tosh

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:

enter image description here

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:

Objectif c:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view1.clipsToBounds = YES;
    self.view2.clipsToBounds = NO;
}

Rapide:

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:

enter image description here

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:

enter image description here

243
nhgrif

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
0
Shakeel Ahmed