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