web-dev-qa-db-fra.com

La définition du rayon de coin sur UIImageView ne fonctionne pas

Je suis un peu perdue. J'ai utilisé la propriété layer d'UIView pour arrondir les angles de plusieurs éléments de mon application. Cependant, celui-ci UIImageView n'est tout simplement pas conforme. Pas sûr de ce que je manque.

UIImageView (appelé previewImage) est contenu dans une cellule de vue de tableau. J'ai essayé de définir l'emplacement multiple de la propriété cornerRadius (dans la cellule elle-même et dans le contrôleur qui crée la cellule) sans succès.

static NSString *CellIdentifier = @"MyTableViewCell";

MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
    cell = [topLevelObjects objectAtIndex:0];
    cell.previewImage.layer.cornerRadius = 20; //Made it 20 to make sure it's obvious.
}

Y a-t-il quelque chose dans la façon dont les cellules sont chargées qui me manque?

112
MarkPowell

Vous devez définir la propriété masksToBounds de la couche sur YES:

cell.previewImage.layer.masksToBounds = YES;

En effet, le contrôle UIImageView crée une pseudo-sous-vue destinée à contenir l'objet UIImage.

347
Evan Mulawski

Cela devrait marcher

cell.previewImage.clipsToBounds = YES;

cell.previewImage.layer.cornerRadius = 20;
21
Teena nath Paul

A noter également que 

  1. Si vous utilisez aspectFit ET cornerRadius avec clipsToBounds/masksToBounds, vous n'obtiendrez pas les angles arrondis.

c'est-à-dire si vous avez ceci

theImageView.contentMode = .scaleAspectFit

et 

   theImageView.layer.cornerRadius = (theImageView.frame.size.height)/2
    theImageView.clipsToBounds = true

ou 

theImageView.layer.masksToBounds = true

Cela ne fonctionnera pas. vous devrez vous débarrasser du code aspectFit

//theImageView.contentMode = .scaleAspectFit
  1. Assurez-vous que la largeur et la hauteur de la vue d'image sont identiques
18
Naishta

Je crois que vous devez définir:

cell.previewImage.layer.masksToBounds = YES;
cell.previewImage.layer.opaque = NO;
11
Daniel Dickison

Dans Xcode Interface Builder, sélectionnez l'attribut de dessin 'Clip Subviews' pour la vue, puis définissez le rayon du coin dans le code cell.previewImage.layer.cornerRadius = 20; annule le travail pour moi!

Voir l'option 'Clip Subviews' dans IB

4
koira

Essayez ce morceau de code ci-dessous

cell.previewImage.layer.cornerRadius = 20;
cell.previewImage.clipsToBounds = YES;
2
Vaibhav Thakre

Essayez ce code: -

self.imgaviewName.clipsToBounds = true
self.imageviewName.layer.cornerRadius = 10
1
kangna sharma

Swift 4.2 Réponse:

Pour que le rayon de coin fonctionne, ajoutez l'image à une UIView et vous devez ensuite définir la propriété masksToBounds de l'image sur true:

planeImage.layer.masksToBounds = true
planeImage.layer.cornerRadius = 20

Remarque: remplacez 20 par la cornerRadius souhaitée

0
IronmanX46
-(void) viewDidAppear:(BOOL)animated{
       [super viewDidAppear:animated];
       [self setMaskTo:viewDistance 
             byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight];
           }

- (void)setMaskTo:(UIView*)view byRoundingCorners:(UIRectCorner)corners
     {
      UIBezierPath *rounded = [UIBezierPath 
                bezierPathWithRoundedRect:view.bounds
                                              byRoundingCorners:corners

                     cornerRadii:CGSizeMake(20.0, 20.0)];

          CAShapeLayer *shape = [[CAShapeLayer alloc] init];
          shape.frame = self.view.bounds;
         [shape setPath:rounded.CGPath];
          view.layer.mask = shape;
       }
0
Maulik Patel