Как установить изображение сверху, избегая места в UIimageView
У меня есть UIImageView с режимом содержимого Aspect Fit размером 220x155. Я динамически вставляю разные изображения в разных разрешениях, но все они больше, чем размер UIImageView. Поскольку режим содержимого установлен в Aspect Fit, изображение масштабируется относительно соотношения, чтобы соответствовать UIImageView.
Моя проблема в том, что если, например, изображение внутри UIImageView масштабируется до 220x100, я бы хотел, чтобы UIImageView тоже уменьшился с высоты 155 до 100, чтобы избежать пробелов между моими элементами.
Как я могу это сделать?
3 ответа
Я написал этот метод, чтобы получить кадр представления изображения после загрузки изображения. Итак, требования для меня были такими же, как и в вашем случае:
1) представление изображения с режимом содержимого с аспектным соответствием 2) получить точный кадр изображения (таким образом вы можете изменить положение представления изображения)
Надеюсь это поможет:
- (CGRect) getFrameOfImage:(AsyncImageView *) imgView
{
if(!imgView.loaded)
return CGRectZero;
CGSize imgSize = imgView.image.size;
CGSize frameSize = imgView.frame.size;
CGRect resultFrame;
if(imgSize.width < frameSize.width && imgSize.height < frameSize.height)
{
resultFrame.size = imgSize;
}
else
{
float widthRatio = imgSize.width / frameSize.width;
float heightRatio = imgSize.height / frameSize.height;
float maxRatio = MAX (widthRatio , heightRatio);
NSLog(@"widthRatio = %.2f , heightRatio = %.2f , maxRatio = %.2f" , widthRatio , heightRatio , maxRatio);
resultFrame.size = CGSizeMake(imgSize.width / maxRatio, imgSize.height / maxRatio);
}
resultFrame.origin = CGPointMake(imgView.center.x - resultFrame.size.width/2 , imgView.center.y - resultFrame.size.height/2);
return resultFrame;
}
Я использую здесь AsyncImageView
но это будет работать так же хорошо с UIImageView
, Важно помнить, что этот метод следует вызывать ПОСЛЕ загрузки изображения.
Ура!
Это очень просто, вам просто нужно получить фактический размер изображения, что может быть сделано
UIImage *image = [UIImage imageName:@""];
тогда вам просто нужно установить рамку
imageView.frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height);
Надеюсь, это поможет вам.
После того, как изображение для изображения будет установлено на новое изображение (и, соответственно, будет масштабировано), вы можете получить высоту изображения внутри изображения (imageview.image.size.height) и соответственно установить высоту изображения (кадр).