Установка углового радиуса на UIImageView не работает

Я немного потерял. Я использовал свойство 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.
}

Есть ли что-то о том, как загружаются ячейки, которые мне не хватает?

Ответы

Ответ 1

Вам нужно установить для свойства layer masksToBounds значение YES:

cell.previewImage.layer.masksToBounds = YES;

Это связано с тем, что элемент управления UIImageView создает псевдо-subview для хранения объекта UIImage.

Ответ 2

Также стоит отметить, что

  1. Если вы используете aspectFit AND cornerRadius с clipsToBounds/masksToBounds, вы не получите скругленные углы.

т.е. если у вас есть это

theImageView.contentMode = .scaleAspectFit

а также

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

или же

theImageView.layer.masksToBounds = true

Это не сработает. вам придется избавиться от кода aspectFit

//theImageView.contentMode = .scaleAspectFit
  1. Убедитесь, что ширина и высота для просмотра изображения одинаковы

Ответ 3

Это должно работать

cell.previewImage.clipsToBounds = YES;

cell.previewImage.layer.cornerRadius = 20;

Ответ 4

Я считаю, что вам нужно установить:

cell.previewImage.layer.masksToBounds = YES;
cell.previewImage.layer.opaque = NO;

Ответ 5

В Xcode Interface Builder, выбрав атрибут рисования "Clip Subviews" для представления вместе с настройкой радиуса угла в коде cell.previewImage.layer.cornerRadius = 20;, выполняет ли моя работа!

См. параметр "Захват клипов" в IB

Ответ 6

Попробуйте сделать это ниже фрагмента кода

cell.previewImage.layer.cornerRadius = 20;
cell.previewImage.clipsToBounds = YES;

Ответ 7

Попробуйте этот код: -

self.imgaviewName.clipsToBounds = true
self.imageviewName.layer.cornerRadius = 10

Ответ 8

-(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;
       }

Ответ 9

Swift 4.2 Ответ:

Чтобы угловой радиус работал, добавьте изображение в UIView а затем вам нужно установить для свойства image masksToBounds значение true:

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

Примечание: замените 20 на нужный cornerRadius

Ответ 10

Ничего из предыдущих ответов не работает?

Может случиться, что размер UIImageView больше, чем размер изображения. Радиус угла может быть установлен хорошо, но не виден в этом случае.

Быстрая проверка размера UIImageView по коду: (или можно использовать инструмент "Просмотр иерархии пользовательского интерфейса" в XCode)

self.imageView.backgroundColor = [UIColor greenColor]; 

В этом сценарии вы должны убедиться, что UIImageView имеет такое же соотношение сторон, что и изображение.