Ответ 1
Вам нужно установить для свойства layer masksToBounds
значение YES
:
cell.previewImage.layer.masksToBounds = YES;
Это связано с тем, что элемент управления UIImageView
создает псевдо-subview для хранения объекта UIImage
.
Я немного потерял. Я использовал свойство layer UIView для округления углов нескольких элементов в моем приложении. Однако этот UIImageView просто не соблюдается. Не уверен, что мне не хватает.
UIImageView (называемый previewImage) содержится в ячейке просмотра таблицы. Я пробовал установить свойство cornerRadius множественное расположение (в самой ячейке и в контроллере, который создает ячейку), безрезультатно.
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 obvious.
}
Есть ли что-то о том, как загружаются ячейки, которые мне не хватает?
Вам нужно установить для свойства layer masksToBounds
значение YES
:
cell.previewImage.layer.masksToBounds = YES;
Это связано с тем, что элемент управления UIImageView
создает псевдо-subview для хранения объекта UIImage
.
Также стоит отметить, что
т.е. если у вас есть это
theImageView.contentMode = .scaleAspectFit
а также
theImageView.layer.cornerRadius = (theImageView.frame.size.height)/2
theImageView.clipsToBounds = true
или же
theImageView.layer.masksToBounds = true
Это не сработает. вам придется избавиться от кода aspectFit
//theImageView.contentMode = .scaleAspectFit
Это должно работать
cell.previewImage.clipsToBounds = YES;
cell.previewImage.layer.cornerRadius = 20;
Я считаю, что вам нужно установить:
cell.previewImage.layer.masksToBounds = YES;
cell.previewImage.layer.opaque = NO;
В Xcode Interface Builder, выбрав атрибут рисования "Clip Subviews" для представления вместе с настройкой радиуса угла в коде cell.previewImage.layer.cornerRadius = 20;
, выполняет ли моя работа!
Попробуйте сделать это ниже фрагмента кода
cell.previewImage.layer.cornerRadius = 20;
cell.previewImage.clipsToBounds = YES;
Попробуйте этот код: -
self.imgaviewName.clipsToBounds = true
self.imageviewName.layer.cornerRadius = 10
-(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;
}
Swift 4.2 Ответ:
Чтобы угловой радиус работал, добавьте изображение в UIView
а затем вам нужно установить для свойства image masksToBounds
значение true
:
planeImage.layer.masksToBounds = true
planeImage.layer.cornerRadius = 20
Примечание: замените 20 на нужный cornerRadius
Ничего из предыдущих ответов не работает?
Может случиться, что размер UIImageView больше, чем размер изображения. Радиус угла может быть установлен хорошо, но не виден в этом случае.
Быстрая проверка размера UIImageView по коду: (или можно использовать инструмент "Просмотр иерархии пользовательского интерфейса" в XCode)
self.imageView.backgroundColor = [UIColor greenColor];
В этом сценарии вы должны убедиться, что UIImageView имеет такое же соотношение сторон, что и изображение.