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