Настройка углового радиуса на UIImageView не работает - PullRequest
118 голосов
/ 30 ноября 2010

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

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

Ответы [ 9 ]

355 голосов
/ 30 ноября 2010

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

cell.previewImage.layer.masksToBounds = YES;

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

22 голосов
/ 22 июня 2017

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

  1. Если вы используете aspectFit И 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. Убедитесь, что ширина и высота для просмотра изображений одинаковы
21 голосов
/ 06 октября 2012

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

cell.previewImage.clipsToBounds = YES;

cell.previewImage.layer.cornerRadius = 20;
11 голосов
/ 30 ноября 2010

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

cell.previewImage.layer.masksToBounds = YES;
cell.previewImage.layer.opaque = NO;
4 голосов
/ 09 октября 2015

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

См. «Subviews клипа»опция в IB

2 голосов
/ 20 октября 2016

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

cell.previewImage.layer.cornerRadius = 20;
cell.previewImage.clipsToBounds = YES;
1 голос
/ 20 декабря 2018

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

self.imgaviewName.clipsToBounds = true
self.imageviewName.layer.cornerRadius = 10
0 голосов
/ 08 апреля 2019

Swift 4.2 Ответ:

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

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

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

0 голосов
/ 24 августа 2017
-(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;
       }
...