Mode 属性如何影响图像

视图的内容模式属性说明了其内容的布局方式。在 Interface Builder 中,可以在 Attributes Inspector 中选择各种模式。

StackOverflow 文档

让我们使用两个图像视图来查看各种模式的工作原理。

StackOverflow 文档

缩放到填充

StackOverflow 文档

图像高度和宽度被拉伸以匹配 UIImageView 的大小。

Aspect Fit

StackOverflow 文档

拉伸图像的最长边(高度或宽度)以匹配视图。这使得图像尽可能大,同时仍然显示整个图像而不会扭曲高度或宽度。 (我将 UIImageView 背景设置为蓝色,以便它的大小清晰。)

Aspect 填充

StackOverflow 文档

拉伸图像的最短边(高度或宽度)以匹配视图。与 Aspect Fit 类似,图像的比例不会与其原始宽高比失真。

重绘

StackOverflow 文档

重绘仅适用于需要进行自定义缩放和调整大小的自定义视图。我们没有使用自定义视图,因此我们不应该使用 Redraw。请注意,这里 UIImageView 只给出了与 Scale to Fill 相同的结果,但它在幕后做了更多的工作。

关于 Redraw, Apple 文档说:

内容模式适用于回收视图内容,但是当你特别希望自定义视图在缩放和调整大小操作期间重绘时,你也可以将内容模式设置为 UIViewContentModeRedraw 值。将视图的内容模式设置为此值会强制系统调用视图的 drawRect:方法以响应几何体更改。通常,应尽可能避免使用此值,并且当然不应将其与标准系统视图一起使用。

中央

StackOverflow 文档

图像在视图中居中,但图像的长度和宽度未拉伸。

最佳

StackOverflow 文档

图像的上边缘在视图顶部水平居中,图像的长度和宽度未拉伸。

底部

StackOverflow 文档

图像的下边缘水平居中于视图的底部,图像的长度和宽度未拉伸。

剩下

StackOverflow 文档

图像的左边缘垂直居中于视图的左侧,图像的长度和宽度未被拉伸。

StackOverflow 文档

图像的右边缘垂直居中于视图的右侧,图像的长度和宽度不会拉伸。

左上方

StackOverflow 文档

图像的左上角位于视图的左上角。图像的长度和宽度未拉伸。

右上

StackOverflow 文档

图像的右上角位于视图的右上角。图像的长度和宽度未拉伸。

左下方

StackOverflow 文档

图像的左下角位于视图的左下角。图像的长度和宽度未拉伸。

右下角

StackOverflow 文档

图像的右下角位于视图的右下角。图像的长度和宽度未拉伸。

笔记

  • 这个例子来自这里

  • 如果内容(在我们的例子中是图像)与视图大小相同(在我们的例子中是 UIImageView),那么更改内容模式将没有明显的区别。

  • 有关 UIImageView 以外的其他视图的内容模式的讨论,请参阅问题和问题。

  • 在 Swift 中,要设置为以编程方式设置内容模式,请执行以下操作:

      imageView.contentMode = UIViewContentMode.scaleToFill
      imageView.contentMode = UIViewContentMode.scaleAspectFit
      imageView.contentMode = UIViewContentMode.scaleAspectFill
      imageView.contentMode = UIViewContentMode.redraw
      imageView.contentMode = UIViewContentMode.center
      imageView.contentMode = UIViewContentMode.top
      imageView.contentMode = UIViewContentMode.bottom
      imageView.contentMode = UIViewContentMode.left
      imageView.contentMode = UIViewContentMode.right
      imageView.contentMode = UIViewContentMode.topLeft
      imageView.contentMode = UIViewContentMode.topRight
      imageView.contentMode = UIViewContentMode.bottomLeft
      imageView.contentMode = UIViewContentMode.bottomRight