Jestem trochę zagubiony. Użyłem właściwości warstwy UIView do zaokrąglenia rogów wielu elementów w mojej aplikacji. Jednak ten jeden UIImageView po prostu nie jest zgodny. Nie wiem, czego mi brakuje.
UIImageView (o nazwie previewImage) znajduje się w komórce widoku tabeli. Próbowałem ustawić wiele lokalizacji właściwości cornerRadius (w samej komórce i kontrolerze, który tworzy komórkę) bez skutku.
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.
}
Czy jest coś, czego mi brakuje w sposobie ładowania komórek?
iphone
ios
uiimageview
rounded-corners
MarkPowell
źródło
źródło
shouldRasterize = false
?Warto też to zauważyć
tj. jeśli masz to
theImageView.contentMode = .scaleAspectFit
i
theImageView.layer.cornerRadius = (theImageView.frame.size.height)/2 theImageView.clipsToBounds = true
lub
theImageView.layer.masksToBounds = true
To nie zadziała . będziesz musiał pozbyć się kodu AspectFit
//theImageView.contentMode = .scaleAspectFit
źródło
To powinno działać
cell.previewImage.clipsToBounds = YES; cell.previewImage.layer.cornerRadius = 20;
źródło
clipsToBounds
jest to metoda w późniejszej klasie. Uwierz, że jestmasksToBounds
jak powyżej.Uważam, że musisz ustawić:
cell.previewImage.layer.masksToBounds = YES; cell.previewImage.layer.opaque = NO;
źródło
W Xcode Interface Builder wybranie atrybutu rysunku „Clip Subviews” dla widoku wraz z ustawieniem promienia narożnika w kodzie
cell.previewImage.layer.cornerRadius = 20;
robi to za mnie!Zobacz opcję „Clip Subviews” w IB
źródło
Wypróbuj poniższy fragment kodu
cell.previewImage.layer.cornerRadius = 20; cell.previewImage.clipsToBounds = YES;
źródło
Wypróbuj ten kod: -
self.imgaviewName.clipsToBounds = true self.imageviewName.layer.cornerRadius = 10
źródło
Dla nie stosuje się, jeżeli obraz jest bardzo duża, w zależności od sprzętu.
imageView.contentMode = .scaleAspectFill
cornerRadius
Niektóre testy z obrazami panoramicznymi o zmienionym rozmiarze:
Wymiary imageView to 160x100. Co ciekawe, nowszy sprzęt niekoniecznie jest bardziej wydajny.
Zapraszam do edycji tego posta z większą liczbą wyników testów!
źródło
-(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; }
źródło
Odpowiedź Swift 4.2:
Aby promień narożnika działał, dodaj obraz do a,
UIView
a następnie musisz ustawić właściwość obrazumasksToBounds
natrue
:planeImage.layer.masksToBounds = true planeImage.layer.cornerRadius = 20
Uwaga: Zastąp liczbę 20 żądaną
cornerRadius
źródło
Nic z poprzednich odpowiedzi nie działa?
Może się zdarzyć, że rozmiar UIImageView jest większy niż rozmiar obrazu. Promień naroża można ustawić dobrze, ale w takim przypadku nie jest on widoczny.
Szybkie sprawdzenie rozmiaru UIImageView według kodu: (lub można użyć narzędzia „Wyświetl hierarchię interfejsu użytkownika” w XCode)
self.imageView.backgroundColor = [UIColor greenColor];
W tym scenariuszu należy upewnić się, że UIImageView ma ten sam współczynnik proporcji co obraz.
źródło