I'm at a bit of a loss. I've used the layer property of UIView to round the corners of multiple elements in my app. However, this one UIImageView is simply not complying. Not sure what I am missing.
The UIImageView (called previewImage) is contained in a Table View Cell. I've tried setting the cornerRadius property multiple location (in the cell itself and in the controller that creates the cell) to no avail.
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.
}
Is there something about the way cells are loaded that I'm missing?
You need to set the layer's masksToBounds
property to YES
:
cell.previewImage.layer.masksToBounds = YES;
This is because the UIImageView
control creates a pseudo-subview to hold the UIImage
object.
Also worth noting that
ie if you have this
theImageView.contentMode = .scaleAspectFit
and
theImageView.layer.cornerRadius = (theImageView.frame.size.height)/2
theImageView.clipsToBounds = true
or
theImageView.layer.masksToBounds = true
It won't work . you will have to get rid of aspectFit code
//theImageView.contentMode = .scaleAspectFit
This should work
cell.previewImage.clipsToBounds = YES;
cell.previewImage.layer.cornerRadius = 20;
I believe you need to set:
cell.previewImage.layer.masksToBounds = YES;
cell.previewImage.layer.opaque = NO;
In Xcode Interface Builder, selecting 'Clip Subviews' Drawing attribute for the view together with setting the corner radius in the code cell.previewImage.layer.cornerRadius = 20;
does the job for me!
Try this below piece of code
cell.previewImage.layer.cornerRadius = 20;
cell.previewImage.clipsToBounds = YES;
Try this code:-
self.imgaviewName.clipsToBounds = true
self.imageviewName.layer.cornerRadius = 10
For imageView.contentMode = .scaleAspectFill
the cornerRadius
is not applied if the image is very large, depending on the hardware.
Some tests with resized panorama images:
The imageView dimensions where 160x100. Interestingly, the newer hardware isn't necessarily more capable.
Feel free to edit this post with more test results!
UIImageView gives cornerRadius with clipsToBounds folowing is example of Swift and Objectiv-C (The followfing example code for round image)
Swift
myImageView.layer.cornerRadius = myImageView.frame.size.height/2.0
myImageView.clipsToBounds = true
Objectiv -C
[myImageView.layer setCornerRadius:myImageView.frame.size.height/2.0];
[myImageView setClipsToBounds:TRUE];
Swift 4.2 Answer:
In order for the corner radius to work, add the image to a UIView
and then you need to set the image's masksToBounds
property to true
:
planeImage.layer.masksToBounds = true
planeImage.layer.cornerRadius = 20
Note: Replace 20 by the desired cornerRadius
-(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;
}
Nothing from the previous answers is working?
It may happen that the size of the UIImageView is bigger than the image size. Corner radius can be set well but not visible in that case.
Quick check of the UIImageView size by code: (or can use "View UI Hierarchy" tool in XCode)
self.imageView.backgroundColor = [UIColor greenColor];
In this scenario you should assure that UIImageView has the same aspect ratio as the image.
You can use this code
override func viewDidLayoutSubviews() {
yourImageView.layer.cornerRadius = yourImageView.frame.width / 2
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.