Existe-t-il un moyen de définir cornerRadius
uniquement le coin supérieur gauche et le coin supérieur droit d'un UIView
?
J'ai essayé ce qui suit, mais il finit par ne plus voir la vue.
UIView *view = [[UIView alloc] initWithFrame:frame];
CALayer *layer = [CALayer layer];
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRoundedRect:frame byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight) cornerRadii:CGSizeMake(3.0, 3.0)];
layer.shadowPath = shadowPath.CGPath;
view.layer.mask = layer;
view.bounds
, nonframe
, (2) le calque doit être unCAShapeLayer
, nonCALayer
; (3) définissez le calquepath
, nonshadowPath
.Réponses:
Faites attention au fait que si vous avez des contraintes de mise en page, vous devez l'actualiser comme suit dans votre sous-classe UIView:
Si vous ne le faites pas, cela n'apparaîtra pas.
Et pour arrondir les coins, utilisez l'extension:
Cas de contrôleur de vue supplémentaire : Que vous ne puissiez pas ou ne souhaitiez pas sous-classer une vue, vous pouvez toujours arrondir une vue. Faites-le à partir de son contrôleur de vue en remplaçant la
viewWillLayoutSubviews()
fonction, comme suit:la source
Je ne sais pas pourquoi votre solution n'a pas fonctionné mais le code suivant fonctionne pour moi. Créez un masque de Bézier et appliquez-le à votre vue. Dans mon code ci-dessous, j'arrondissais les coins inférieurs de la
_backgroundView
avec un rayon de 3 pixels.self
est une coutumeUITableViewCell
:Version Swift avec quelques améliorations:
Version Swift 3.0:
Extension rapide ici
la source
viewDidLoad
méthode, déplacez-leviewDidAppear
et cela a fonctionné.simulator
taille du storyboard.ex: if the simulator size is 6s it works fine for 6s, but not of others.
comment puis-je surmonter cela.path.CGPath
devrait l'êtrepath.cgPath
viewWillAppear
place. Cela fonctionne également.Voici une version Swift de la réponse @JohnnyRockex
Remarque
Si vous utilisez la disposition automatique , vous devrez sous-classer votre
UIView
et appelerroundCorners
la vuelayoutSubviews
pour un effet optimal.la source
.TopRight
et.BottomRight
ne semblent pas fonctionner pour moi.view.roundCorners([.TopLeft , .BottomLeft], radius: 10)
.layoutIfNeeded()
cette méthode.Et enfin… il y a CACornerMask dans iOS11! Avec
CACornerMask
cela peut être fait assez facile:la source
Exemple de code Swift ici: https://stackoverflow.com/a/35621736/308315
Pas directement. Tu vas devoir:
CAShapeLayer
path
pour êtreCGPathRef
basé surview.bounds
mais avec seulement deux coins arrondis (probablement en utilisant+[UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:]
)view.layer.mask
pour être leCAShapeLayer
la source
Voici une courte méthode implémentée comme ceci:
la source
Dans swift 4.1 et Xcode 9.4.1
Dans iOS 11, cette seule ligne suffit:
Voir le code complet:
Mais pour les versions inférieures
Le code complet est.
Si vous utilisez le redimensionnement automatique dans le storyboard, écrivez ce code dans viewDidLayoutSubviews () .
la source
iOS 11, Swift 4
Et vous pouvez essayer ce code:
Et vous pouvez l'utiliser dans la cellule de vue de table.
la source
Ce serait la réponse la plus simple:
la source
Essayez ce code,
la source
Emma:
.TopRight
et.BottomRight
ne travaillent pas pour vous peut-être parce que l'appel àview.roundCorners
fait avant la finaleview bounds
est calculé. Notez que leBezier Path
dérive des limites de la vue au moment de son appel. Par exemple, si la mise en page automatique réduit la vue, les coins arrondis du côté droit peuvent être en dehors de la vue. Essayez de l'appelerviewDidLayoutSubviews
, où la limite de la vue est définitive.la source
Swift 4 Swift 5 facile en 1 ligne
Usage:
Une fonction:
Dans Objective-C
Usage:
[self.verticalSeparatorView roundCorners:UIRectCornerTopLeft radius:10.0];
Fonction utilisée dans une catégorie (un seul coin):
la source
Ma solution pour arrondir des coins spécifiques de UIView et UITextFiels en swift est d'utiliser
et
des UIView ou UITextFields réels.
Exemple:
Et en utilisant
et
, Je peux spécifier le coin supérieur droit et le coin inférieur droit de l'UITextField à arrondir.
Vous pouvez voir le résultat ici:
la source
Swift 4
la source
Une façon de le faire par programme serait de créer un
UIView
sur la partie supérieure de laUIView
qui a les coins arrondis. Ou vous pouvez cacher le haut sous quelque chose.la source
la source
La façon la plus simple serait de créer un masque avec une couche de coins arrondis.
Et n'oubliez pas de:
la source
Toutes les réponses déjà données sont vraiment bonnes et valables (en particulier l'idée de Yunus d'utiliser la
mask
propriété).Cependant, j'avais besoin de quelque chose d'un peu plus complexe car ma couche pouvait souvent changer de taille, ce qui signifiait que je devais appeler cette logique de masquage à chaque fois et c'était un peu ennuyeux.
J'ai utilisé des
extensions
propriétés rapides et calculées pour construire unecornerRadii
propriété réelle qui s'occupe de la mise à jour automatique du masque lorsque le calque est disposé.Cela a été réalisé en utilisant les grands aspects de Peter Steinberg bibliothèque pour le swizzling.
Le code complet est ici:
J'ai écrit un simple billet de blog expliquant cela.
la source
Si vous recherchez une solution de création d'interface uniquement, il y en a une pour iOS 11 et supérieur . Voir ma réponse ici: https://stackoverflow.com/a/58626264
la source
Voici comment définir un rayon d'angle pour chaque coin d'un bouton avec Xamarin en C # :
la source
Une belle extension pour réutiliser la solution Yunus Nedim Mehel
Swift 2.3
Usage
la source
Après le changement de bit de code @apinho Dans swift 4.3 fonctionne bien
Pour utiliser cette fonction pour vous afficher
la source
Une autre version de la réponse de Stéphane .
la source
Dans Swift 4.2, créez-le via
@IBDesignable
comme ceci:la source
Extension simple
Usage:
la source