Interface Builder中的"Mode"属性是什么,提供"Scale to fill","Aspect fit"等?

Kru*_*lur 39 cocoa-touch interface-builder

我想知道下载"模式"是什么?它包含"缩放以填充","纵横适合"等.到目前为止,我从来没有改变它,但我仍然很好奇它可以用于什么.有人可以解释一下吗?

Sur*_*gch 56

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

在此输入图像描述

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

在此输入图像描述

缩放到填充

在此输入图像描述

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

Aspect Fit

在此输入图像描述

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

Aspect填充

在此输入图像描述

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

重绘

在此输入图像描述

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

关于Redraw,文档说:

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

中央

在此输入图像描述

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

最佳

在此输入图像描述

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

底部

在此输入图像描述

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

剩下

在此输入图像描述

图像的左边缘在视图的左侧垂直居中,图像的长度和宽度不会拉伸.

在此输入图像描述

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

左上方

在此输入图像描述

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

右上

在此输入图像描述

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

左下方

在此输入图像描述

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

右下角

在此输入图像描述

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

笔记

  • 如果内容(在我们的例子中是图像)与视图的大小相同(在我们的例子中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
    
    Run Code Online (Sandbox Code Playgroud)

  • 很详细的解释.我在这里看到的所有例子都是关于`UIImageView`但是Apple在`UIView`上公开了这个属性.这就是造成混乱的原因. (3认同)
  • 神奇的解释.查看所有可视化示例非常有用. (3认同)

Q8i*_*Q8i 26

查看编程指南详细介绍了您的要求.如果向下滚动到"内容模式 "部分,您将找到所需内容.

基本上根据Apple:

"每个视图都有一个内容模式,控制视图如何回收其内容以响应视图几何中的变化[...] contentMode属性中的值确定是否应缩放位图以适应新边界或简单地固定到视角的一角或边缘."