Как установить изображение сверху, избегая места в 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) и соответственно установить высоту изображения (кадр).

Другие вопросы по тегам