UIImageView 填写 UIView

Posted

技术标签:

【中文标题】UIImageView 填写 UIView【英文标题】:UIImageView fill in UIView 【发布时间】:2012-03-01 18:00:11 【问题描述】:

我有一个UIImageView 作为subviewUIView(帧大小300 x 300)。我的UIImage 可以是纵向、横向或一些奇怪的尺寸。如何在UIView帧大小内填充UIImage而不将图像拉伸到300 x 300

为此,我将添加另一个UIImageView 作为图像边框。 请帮忙。

谢谢。

【问题讨论】:

【参考方案1】:

试试

[img setContentMode:UIViewContentModeScaleAspectFit];

UIViewContentModeScaleAspectFit:缩放内容以适应视图的大小 保持纵横比。视图边界的任何剩余区域都是透明的。

[img setContentMode:UIViewContentModeScaleAspectFill];

UIViewContentModeScaleAspectFill:缩放内容以填充视图的大小。一些 部分内容可能会被剪裁以填充视图的边界。

如果你正在裁剪子视图,那么你需要这样做

[imgView clipToBounds:YES];

【讨论】:

我尝试使用上述两种模式,我的图像不适合 300 x 300 ivEditImage = [[UIImageView alloc]initWithImage:imgChoosen]; ivEditImage.frame = vwEditingImage.frame; [ivEditImage setContentMode:UIViewContentModeScaleAspectFill]; UIViewContentModeScaleAspectFit都不做? 如果你正在剪切子视图,那么你需要做[imgView clipToBounds:YES];【参考方案2】:

啊,我刚刚重读了您的问题,我知道您现在的问题是什么。

您的UIImageView 的框架发生变化,当它发生变化时,您的图像也会发生变化。您不希望您的图像发生变化,但您确实希望您的 ImageView 进行调整以填充它所包含的视图。

更新

我想通了。

[self.imageView setContentMode:UIViewContentModeCenter];

无论方向如何,大小都保持不变。

您还可以选择将其设置为对齐上、下、左、右、左上、右上、左下、右下,所有这些都只有助于对齐您的图像,而不是重绘或重新调整大小图片。

这有帮助吗?

【讨论】:

如果我重画,它会拉伸我的图像。有什么不拉伸的选择吗?【参考方案3】:
 [image setContentMode:UIViewContentModeScaleToFill];

【讨论】:

【参考方案4】:

UIImageView 的 contentMode 属性设置为以下任一值,具体取决于您希望将其放在超级视图中的位置:

 UIViewContentModeCenter,
    UIViewContentModeTop,
    UIViewContentModeBottom,
    UIViewContentModeLeft,
    UIViewContentModeRight,
    UIViewContentModeTopLeft,
    UIViewContentModeTopRight,
    UIViewContentModeBottomLeft,
    UIViewContentModeBottomRight,

作为这个值:

UIViewContentModeScaleToFill,
    UIViewContentModeScaleAspectFit,
    UIViewContentModeScaleAspectFill,

确实会导致图像为 300 x 300,这是您不想要的。

【讨论】:

有没有办法把它们结合起来?我想要的是:假设一个 100x10 的图像和一个全屏 UIImageView。我希望它扩展直到水平尺寸等于 UIImageView 宽度(对于 iPhone 来说是 320)并且生成的图像(现在为 320x32)位于顶部。我试过这个 imgview.contentMode = UIViewContentModeScaleAspectFit | UIViewContentModeTop;但它不起作用。它只执行 UIViewContentModeTop 部分(顶部为 100x10)。 @Gik - 你有没有找到任何方法来做到这一点。我遇到了完全相同的问题。 我使用了一个技巧。我“创建”了另一个图像(来自原始图像),拉伸以填充较小的尺寸,然后用我“丢失”的像素填充。所以最后我得到了一张 300x300 的原始图像。如果你愿意,我可以发布代码。【参考方案5】:

使用 UIImageView 的 contentMode 属性。


编辑:并将图像尺寸设置为300x300

【讨论】:

以上是关于UIImageView 填写 UIView的主要内容,如果未能解决你的问题,请参考以下文章

在 UIImageview 上覆盖 UIImageview 保存

UIImageView:将多个 UIViewContentMode 属性应用于一个 UIImageView?

使 UIImageview 根据另一个 UIImageview 旋转而旋转

UIImageview的简单运用

如何同时为 UIImageView 的图像和 UIImageView 本身设置动画?

ios UIImageView处理图片大小问题