Question Donner des coins arrondis à UIView


Ma vue de connexion a une sous-vue qui a un UIActivityView et un UILabel en disant "Signing In ...". Cette sous-vue a des coins qui ne sont pas arrondis. Comment puis-je les faire tourner?

Y at-il un moyen de le faire dans mon xib?


522
2017-10-02 13:36


origine


Réponses:


Essaye ça

#import <QuartzCore/QuartzCore.h> // not necessary for 10 years now  :)

...

view.layer.cornerRadius = 5;
view.layer.masksToBounds = true;

Remarque: Si vous essayez d'appliquer des coins arrondis à un UIViewControllervue, il ne devrait pas être appliqué dans le constructeur du contrôleur de vue, mais plutôt dans -viewDidLoad, après view est réellement instancié.


1150
2017-10-02 13:40



Vous pouvez également utiliser le Attributs d'exécution définis par l'utilisateur fonctionnalité du générateur d'interface pour définir le chemin de la clé layer.cornerRadius à une valeur. Assurez-vous d'inclure le QuartzCore bibliothèque cependant.

Cette astuce fonctionne également pour la définition de layer.borderWidth, mais cela ne fonctionnera pas pour layer.borderColor comme cela attend un CGColor pas un UIColor.

Vous ne pourrez pas voir les effets dans le storyboard car ces paramètres sont évalués lors de l'exécution.

Using Interface builder to set the corner radius


248
2017-07-15 22:17



Vous pouvez maintenant utiliser une catégorie rapide dans UIView (code ci-dessous) avec @IBInspectable pour afficher le résultat au niveau du storyboard (si vous utilisez cette catégorie, utilisez uniquement cornerRadius et non layer.cornerRadius comme chemin de clé).

extension UIView {
    @IBInspectable var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        }
    }
}

enter image description here


58
2018-01-16 16:26



Une approche différente de celle d'Ed Marty:

#import <QuartzCore/QuartzCore.h>

[v.layer setCornerRadius:25.0f];
[v.layer setMasksToBounds:YES];

Vous avez besoin du setMasksToBounds pour charger tous les objets d'IB ... j'ai eu un problème où ma vue s'est arrondie, mais ne contenait pas les objets d'IB: /

ceci l'a fixé = D espère que cela aide!


43
2017-12-09 12:23



Rapide

Réponse courte:

myView.layer.cornerRadius = 8
myView.layer.masksToBounds = true  // optional

Réponse supplémentaire

Si vous êtes arrivé à cette réponse, vous avez probablement déjà vu assez pour résoudre votre problème. J'ajoute cette réponse pour donner un peu plus d'explication visuelle pour expliquer pourquoi les choses font ce qu'elles font.

Si vous commencez avec un régulier UIView il a des coins carrés.

let blueView = UIView()
blueView.frame = CGRect(x: 100, y: 100, width: 100, height: 50)
blueView.backgroundColor = UIColor.blueColor()
view.addSubview(blueView)

enter image description here

Vous pouvez lui donner des coins arrondis en changeant le cornerRadius propriété de la vue layer.

blueView.layer.cornerRadius = 8

enter image description here

Les valeurs de rayon plus élevées donnent des coins plus arrondis

blueView.layer.cornerRadius = 25

enter image description here

et des valeurs plus petites donnent des coins moins arrondis.

blueView.layer.cornerRadius = 3

enter image description here

Cela pourrait suffire à résoudre votre problème là. Cependant, une vue peut parfois avoir une sous-vue ou une sous-couche qui sort des limites de la vue. Par exemple, si je devais ajouter un sousvue comme ça

let mySubView = UIView()
mySubView.frame = CGRect(x: 20, y: 20, width: 100, height: 100)
mySubView.backgroundColor = UIColor.redColor()
blueView.addSubview(mySubView)

ou si je devais ajouter un souscouche comme ça

let mySubLayer = CALayer()
mySubLayer.frame = CGRect(x: 20, y: 20, width: 100, height: 100)
mySubLayer.backgroundColor = UIColor.redColor().CGColor
blueView.layer.addSublayer(mySubLayer)

Ensuite, je finirais avec

enter image description here

Maintenant, si je ne veux pas que les choses pendent hors des limites, je peux le faire

blueView.clipsToBounds = true

ou ca

blueView.layer.masksToBounds = true

ce qui donne ce résultat:

enter image description here

Tous les deux clipsToBounds et masksToBounds sont équivalent. C'est juste que le premier est utilisé avec UIView et le second est utilisé avec CALayer.

Voir également


37
2018-01-25 01:07



Comme décrit dans ce blog, voici une méthode pour arrondir les coins d'un UIView:

+(void)roundView:(UIView *)view onCorner:(UIRectCorner)rectCorner radius:(float)radius
{
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds
                                                   byRoundingCorners:rectCorner
                                                         cornerRadii:CGSizeMake(radius, radius)];
    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
    maskLayer.frame = view.bounds;
    maskLayer.path = maskPath.CGPath;
    [view.layer setMask:maskLayer];
    [maskLayer release];
}

La partie cool à ce sujet est que vous pouvez sélectionner les coins que vous voulez arrondi.


26
2017-09-10 11:09



Vous devez d'abord importer le fichier d'en-tête <QuartzCore/QuartzCore.h>

 #import QuartzCore/QuartzCore.h>

[yourView.layer setCornerRadius:8.0f];
yourView.layer.borderColor = [UIColor redColor].CGColor;
yourView.layer.borderWidth = 2.0f;
[yourView.layer setMasksToBounds:YES];

Ne manquez pas d'utiliser -setMasksToBounds , sinon l'effet peut ne pas être affiché.


19
2017-08-01 10:19



Vous pouvez utiliser la classe UIView personnalisée suivante écrite dans Swift 3.0, qui peut également changer la couleur et la largeur de la bordure. Comme ceci est IBDesignalbe Vous pouvez également modifier les attributs dans le constructeur d'interface.

enter image description here

import UIKit

@IBDesignable public class RoundedView: UIView {

    @IBInspectable var borderColor: UIColor = UIColor.white {
        didSet {
            layer.borderColor = borderColor.cgColor
        }
    }

    @IBInspectable var borderWidth: CGFloat = 2.0 {
        didSet {
            layer.borderWidth = borderWidth
        }
    }

    @IBInspectable var cornerRadius: CGFloat = 0.0 {
        didSet {
            layer.cornerRadius = cornerRadius
        }
    }

}

7
2017-10-26 08:31



UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 50, 200, 200)];

view.layer.backgroundColor = [UIColor whiteColor].CGColor;
view.layer.cornerRadius = 20.0;
view.layer.frame = CGRectInset(v.layer.frame, 20, 20);

view.layer.shadowOffset = CGSizeMake(1, 0);
view.layer.shadowColor = [[UIColor blackColor] CGColor];
view.layer.shadowRadius = 5;
view.layer.shadowOpacity = .25;

[self.view addSubview:view];
[view release];

6
2018-05-23 11:51