UIImageView 填写 UIView
Posted
技术标签:
【中文标题】UIImageView 填写 UIView【英文标题】:UIImageView fill in UIView 【发布时间】:2012-03-01 18:00:11 【问题描述】:我有一个UIImageView
作为subview
的UIView
(帧大小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 旋转而旋转