【问题标题】:UIViewContentModeScaleAspectFit in UIImageView does not work correctlyUIImageView 中的 UIViewContentModeScaleAspectFit 无法正常工作
【发布时间】:2015-10-28 09:14:50
【问题描述】:

我尝试将图像放入我的UIImageView,称为 imgBack 我在标题中将UIImageView 定义为IBOutlet

IBOutlet UIImageView *imgBack;

在我的 viewDidLoad 函数中,我将 contentMode 设置为:

imgBack.contentMode = UIViewContentModeScaleAspectFit;

但是在我像这样将图像加载到 imgBack 之后:

imgBack.image = [UIImage imageWithContentsOfFile: imagePath];

它无法缩放以适应图像视图

这是我加载到 imgBack 中的图片: image i try to load

这就是它在视图中的样子:image in UIImageView

如您所见,图像不适合视图。 有谁知道为什么?

【问题讨论】:

  • 使用UIViewContentModeScaleAspectFill
  • 也可以试试这个。但后来它也被裁剪了。
  • 你为imgBack设置框架了吗?
  • 不,因为我在 Storyboard 上将 UIImageView 创建为 IBOutlet,所以我没有设置框架。如果我以编程方式创建 UIImageView,是否不仅需要框架?
  • 所以,在故事板中,选择 imageview 并在故事板本身中设置 contentmode。

标签: ios objective-c uiimageview


【解决方案1】:

如果更改 ImageView contentMode 对您不起作用,那么您可以尝试使用以下代码调整图像大小以适应 Image View

UIImage *originalImage = [UIImage imageWithContentsOfFile: imagePath];
imgBack.image = [self resizeImage: originalImage imageSize: imgBack.size];

并将此代码添加到您的 ViewController

-(UIImage*)resizeImage:(UIImage *)image imageSize:(CGSize)size
    {
        UIGraphicsBeginImageContext(size);
        [image drawInRect:CGRectMake(0,0,size.width,size.height)];
        UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
        //here is the scaled image which has been changed to the size specified
        UIGraphicsEndImageContext();
        return newImage;

    }

【讨论】:

  • 感谢您的回答。但这对我来说似乎是一个丑陋的解决方法。原始图像是否被较小的图像覆盖?
  • 不,你可以从这个方法中得到一个单独的 UIImage,你可以在你的 UIImageView 中使用它。原始图像根本没有改变。
【解决方案2】:

先把图片附加到UIImageView再改content mode

imgBack.image = [UIImage imageWithContentsOfFile: imagePath];
imgBack.contentMode = UIViewContentModeScaleAspectFill;
imgBack.clipsToBounds = YES;

【讨论】:

  • 在“UIImageView *”类型的对象上找不到属性“imageView”;你是说'maskView'吗?
【解决方案3】:
below are the mode try and check
UIViewContentModeScaleToFill,
    UIViewContentModeScaleAspectFit,      // contents scaled to fit with fixed aspect. remainder is transparent
    UIViewContentModeScaleAspectFill,     // contents scaled to fill with fixed aspect. some portion of content may be clipped.
    UIViewContentModeRedraw,              // redraw on bounds change (calls -setNeedsDisplay)
    UIViewContentModeCenter,              // contents remain same size. positioned adjusted.
    UIViewContentModeTop,
    UIViewContentModeBottom,
    UIViewContentModeLeft,
    UIViewContentModeRight,
    UIViewContentModeTopLeft,
    UIViewContentModeTopRight,
    UIViewContentModeBottomLeft,
    UIViewContentModeBottomRight,

【讨论】:

  • 我已经尝试了其中的大部分,但没有一个可以正常工作。我认为应该工作的是 AspectFit
猜你喜欢
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多