web-dev-qa-db-de.com

Das Einstellen des Eckenradius für UIImageView funktioniert nicht

Ich bin etwas ratlos. Ich habe die Layer-Eigenschaft von UIView verwendet, um die Ecken mehrerer Elemente in meiner App abzurunden. Dieses eine UIImageView entspricht jedoch einfach nicht. Nicht sicher, was mir fehlt.

Die UIImageView (als previewImage bezeichnet) ist in einer Table View-Zelle enthalten. Ich habe versucht, die cornerRadius-Eigenschaft mehrfach (in der Zelle selbst und im Controller, der die Zelle erstellt) festzulegen, ohne Erfolg.

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.
}

Gibt es etwas über die Art, wie Zellen geladen werden, die ich vermisse?

112
MarkPowell

Sie müssen die masksToBounds -Eigenschaft des Layers auf YES setzen:

cell.previewImage.layer.masksToBounds = YES;

Dies liegt daran, dass das Steuerelement UIImageView eine Pseudo-Unteransicht für das Objekt UIImage erstellt.

347
Evan Mulawski

Das sollte funktionieren

cell.previewImage.clipsToBounds = YES;

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

Das ist auch erwähnenswert 

  1. Wenn Sie aspectFit AND cornerRadius mit clipsToBounds/masksToBounds verwenden, erhalten Sie keine abgerundeten Ecken.

wenn Sie das haben

theImageView.contentMode = .scaleAspectFit

und 

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

oder 

theImageView.layer.masksToBounds = true

Es funktioniert nicht. Sie müssen AspektFit-Code loswerden

//theImageView.contentMode = .scaleAspectFit
  1. Stellen Sie sicher, dass Breite und Höhe für die Bildansicht gleich sind
18
Naishta

Ich glaube, Sie müssen einstellen:

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

Wenn Sie im Xcode Interface Builder "Zeichnen von Unteransichten" auswählen, wird das Zeichnungsattribut für die Ansicht zusammen mit dem Eckradius im Code cell.previewImage.layer.cornerRadius = 20; ausgewählt.

Siehe 'Subeviews ausschneiden' in IB

4
koira

Probieren Sie diesen Code unten aus

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

Versuchen Sie diesen Code: -

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

Swift 4.2 Antwort:

Damit der Eckenradius funktioniert, fügen Sie das Bild einer UIView hinzu und setzen Sie dann die Eigenschaft masksToBounds des Bildes auf true:

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

Hinweis: Ersetzen Sie 20 durch die gewünschte cornerRadius

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