it-swarm.com.ru

Настройка углового радиуса на 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's obvious.
}

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

112
MarkPowell

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

cell.previewImage.layer.masksToBounds = YES;

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

347
Evan Mulawski

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

cell.previewImage.clipsToBounds = YES;

cell.previewImage.layer.cornerRadius = 20;
21
Teena nath Paul

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

  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. Убедитесь, что ширина и высота для просмотра изображений одинаковы
18
Naishta

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

cell.previewImage.layer.masksToBounds = YES;
cell.previewImage.layer.opaque = NO;
11
Daniel Dickison

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

Смотрите опцию «Клип Subviews» в IB

4
koira

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

cell.previewImage.layer.cornerRadius = 20;
cell.previewImage.clipsToBounds = YES;
2
Vaibhav Thakre

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

self.imgaviewName.clipsToBounds = true
self.imageviewName.layer.cornerRadius = 10
1
kangna sharma

Swift 4.2 Ответ:

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

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

Примечание: замените 20 на желаемую cornerRadius

0
IronmanX46
-(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;
       }
0
Maulik Patel