web-dev-qa-db-fra.com

Comment changer le rayon de coin de UISegmentedControl?

Est-il possible de changer le rayon de coin de UISegmentedControl? J'ai essayé l'approche suivante que nous utilisons pour changer le rayon de coin d'un UIView.

    self.segmentedControl.layer.cornerRadius = 15.0;
    self.segmentedControl.layer.masksToBounds = YES;

Cela n'a pas fonctionné car vous pouvez voir qu'il ne fait que couper le coin d'UISegmentedControl . enter image description here

Merci!

29
wz366

Cela devrait fonctionner:

self.segmentedControl.layer.cornerRadius = 15.0;
self.segmentedControl.layer.borderColor = [UIColor whiteColor].CGColor;
self.segmentedControl.layer.borderWidth = 1.0f;
self.segmentedControl.layer.masksToBounds = YES;

Vous devez spécifier la bordure après avoir défini cornerRadius.

86
xi.lin

Intégrez UISegmentedControl dans UIView et définissez le rayon de coin pour UIView.

Objectif c

outerView.layer.cornerRadius = CGRectGetHeight(outerView.bounds) / 2;
outerView.layer.borderColor = [UIColor blueColor].CGColor;
outerView.layer.borderWidth = 1;

Rapide

outerView.layer.cornerRadius = CGRectGetHeight(outerView.bounds) / 2
outerView.layer.borderColor = UIColor.blueColor().CGColor
outerView.layer.borderWidth = 1

 Cornered UISegmentedControl

32
Yakiv Kovalsky

Le contrôle segmenté ne va pas changer la façon dont il dessine ses angles, il continue donc à dessiner ses angles à sa manière et vous les coupez ensuite. Vous n'êtes pas responsable de la façon dont un contrôle segmenté dessine sa forme limite. Si vous n'aimez vraiment pas la façon dont il est dessiné, vous devrez concevoir votre propre contrôle de substitution à partir de zéro. Le mieux que vous puissiez faire en toute légitimité est de définir l’image d’arrière-plan du contrôle segmenté.

9
matt

Mise à jour pour la compatibilité Swift 3 & Xcode 8.2

    mySegmentedControl.layer.cornerRadius = 25.0
    mySegmentedControl.layer.borderColor = UIColor.white.cgColor
    mySegmentedControl.layer.borderWidth = 1.0
    mySegmentedControl.layer.masksToBounds = true
4
deijmaster

Votre résultat est dû au fait que quelque chose d'autre (dessin personnalisé?) Contrôle la bordure et non le calque. Heureusement, il semble que les paramètres de cette couche soient prioritaires.

Si vous savez de quelle couleur de bordure vous avez besoin, vous pouvez simplement ajouter (exemple):

self.segmentedControl.layer.borderColor = [UIColor whiteColor].CGColor;
self.segmentedControl.layer.borderWidth = 1.0;
4
Mihai Timar

Les solutions précédentes n'ont jamais fonctionné pour moi. Ma solution est:

Pour incorporer la UISegmentedControl dans un superview, affectez -1 aux contraintes menant, finissant, bas, haut afin de couper la bordure UISegmentedControl. Enfin, la vue d'ensemble doit être configurée de la manière suivante:

segmentedControl.superview.clipsToBounds = true
segmentedControl.superview.layer.cornerRadius = 0 //whatever
segmentedControl.superview.layer.borderWidth = 1
segmentedControl.superview.layer.borderColor = segmentedControl.tintColor.CGColor
3
Andrea Mugnaini

C'est un code converti et fonctionnel pour Swift 4.1 et Xcode 9.3 de message de Yakiv .

segmentedOuterView.layer.cornerRadius = segmentedOuterView.bounds.height / 2
segmentedOuterView.layer.borderColor = UIColor.red.cgColor
segmentedOuterView.layer.borderWidth = 1
segmentedOuterView.layer.masksToBounds = true
2
atereshkov

Utilisez le code suivant: 

segmentContrl.layer.borderColor=*anycolor*.CGColor;
segmentContrl.layer.cornerRadius = 0.0;
segmentContrl.layer.borderWidth = 1.5f;
1
swathy krishnan