Настройка углового радиуса на 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.
}
Есть ли что-то в том, как загружаются клетки, которые мне не хватает?
13 ответов
Вам нужно установить слой masksToBounds
собственность на YES
:
cell.previewImage.layer.masksToBounds = YES;
Это потому что UIImageView
элемент управления создает псевдо-подпредставление для хранения UIImage
объект.
Также стоит отметить, что
- Если вы используете 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
- Убедитесь, что ширина и высота для просмотра изображения одинаковы
Это должно работать
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;
делает работу для меня!
UIImageView дает angularRadius с clipsToBounds, следующим является пример Swift и Objectiv-C (следующий пример кода для круглого изображения)
Быстрый
myImageView.layer.cornerRadius = myImageView.frame.size.height/2.0
myImageView.clipsToBounds = true
Цель -C
[myImageView.layer setCornerRadius:myImageView.frame.size.height/2.0];
[myImageView setClipsToBounds:TRUE];
Попробуйте этот фрагмент кода ниже
cell.previewImage.layer.cornerRadius = 20;
cell.previewImage.clipsToBounds = YES;
Попробуйте этот код:-
self.imgaviewName.clipsToBounds = true
self.imageviewName.layer.cornerRadius = 10
За imageView.contentMode = .scaleAspectFill
в cornerRadius
не применяется, если изображение очень большое, в зависимости от оборудования.
Некоторые тесты с измененным размером панорамных изображений:
- iPhone X, размер изображения 5000x1107: 4000x886: "…
- iPhone 6s Plus, размер изображения 10000x2215: 5000x1107: "…
- iPhone 6s, размер изображения 10000x2215: 5000x1107: "…
Размеры imageView - 160x100. Интересно, что новое оборудование не обязательно более способно.
Не стесняйтесь редактировать этот пост с дополнительными результатами тестирования!
Swift 4.2 Ответ:
Чтобы радиус угла работал, добавьте изображение в UIView
а затем вам нужно установить изображение masksToBounds
собственность на true
:
planeImage.layer.masksToBounds = true
planeImage.layer.cornerRadius = 20
Примечание: замените 20 на желаемый cornerRadius
Ничего из предыдущих ответов не работает?
Может случиться так, что размер UIImageView больше, чем размер изображения. Угловой радиус можно установить правильно, но в этом случае он не будет виден.
Быстрая проверка размера UIImageView по коду: (или можно использовать инструмент "Просмотр иерархии пользовательского интерфейса" в XCode)
self.imageView.backgroundColor = [UIColor greenColor];
В этом сценарии вы должны убедиться, что UIImageView имеет то же соотношение сторон, что и изображение.
Вы можете использовать этот код
override func viewDidLayoutSubviews() {
yourImageView.layer.cornerRadius = yourImageView.frame.width / 2
}
-(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;
}