31 votes

cornerRadius ne fonctionne plus dans Swift 2.3 / iOS 10 / Xcode 8

J'ai un cornerRadius sur un UIView et un UIImageView à l'intérieur du même UIView . Je calcule le rayon de l'angle avec RockProfileView.frame.size.height / 2 mais l'UIView ne s'affiche plus dans iOS 10.

Après d'autres vérifications, j'ai trouvé la valeur de RockProfileView.frame.size.height / 2 est de 1000.0 alors que les contraintes de largeur et de hauteur sont fixées à 64.0.

Lorsque j'ai codé en dur le RockProfileView.layer.cornerRadius = 32 à 64/2, il fonctionne parfaitement.

Quel est le problème ?

Code complet :

    RockProfileView.layer.cornerRadius = RockProfileView.frame.size.height / 2
    RockProfileView.clipsToBounds = true
    RockProgressView.layer.masksToBounds = true

32voto

Ankit Khanna Points 579

Comme l'a répondu Rob, j'ai déplacé le code de viewDidLoad a viewDidAppear et le problème est résolu.

OU Ajout self.view.layoutIfNeeded() avant votre code dans viewDidLoad résout également le problème.

Dans le cas de UITableViewCell, Inside awakeFromNib ajouter [self layoutIfNeeded]; avant de mettre à jour le rayon de l'angle devrait résoudre tous les problèmes.

8voto

Mehul Thakkar Points 1165

J'ai fait ce code dans awakeFromNib Mais après la mise à jour vers ios 10+xcode 8, il a cessé de fonctionner.

J'ai ensuite déplacé ce code dans layoutSubViews méthode. Ensuite, cela a fonctionné.

En espérant que cela vous sera utile.

Si vous voulez toujours faire cela dans awakefromnib, faites-le après avoir mis un certain délai (en utilisant dispatch_after ou NSOperatinQueue ou performSelectorWithDelay).

4voto

ypk Points 1120

S'il se trouve à l'intérieur de votre ViewControllers au lieu de déplacer toutes les opérations sur les couches vers viewDidLayer déplacer ce code à l'intérieur de DispatchQueue . Cela a fonctionné pour moi :

DispatchQueue.main.async {
            let layer = self.signUpBtn.layer
            layer.borderColor = UIColor.white.cgColor
            layer.borderWidth = 2 / UIScreen.main.scale
        }

J'espère que cela vous aidera

3voto

Sunil aruru Points 247

Une nouveauté dans XCode8, nous ne pouvons pas définir directement le cornerRadius du calque.

Pour appliquer le cornerRadius d'un UIView, il faut

y

E

[yourButton layoutIfNeeded];
yourButton.layer.cornerRadius = yourButton.frame.size.height/2;
[[yourButton layer] setBorderWidth:2.0f];
Example into Swift3

self.layoutIfNeeded()
yourButton.layer.cornerRadius = self.frame.height / 2.0
yourButton.layer.borderWidth = 2.0

2voto

Pour moi ce qui a fonctionné a été le premier appel layoutIfNeeded et plus tard sur set cornerRadius

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X