overlay(alignment:content:)
聲明
func overlay<V>(
alignment: Alignment = .center,
content: () -> V
) -> some View where V : View
返回值
使用指定內容作為前景的視圖。
參數
alignment
修改器用於定位對前景視圖進行分組的隱式
ZStack
的對齊方式。默認值為Alignment/center
。content
一個
ViewBuilder
,用於聲明要在此視圖前麵繪製的視圖,按照列出它們的順序堆疊。您列出的最後一個視圖顯示在堆棧的前麵。
詳述
使用此修飾符將一個或多個視圖放置在另一個視圖的前麵。例如,您可以在 RoundedRectangle
上放置一組星星:
RoundedRectangle(cornerRadius: 8)
.frame(width: 200, height: 100)
.overlay(alignment: .topLeading) { Star(color: .red) }
.overlay(alignment: .topTrailing) { Star(color: .yellow) }
.overlay(alignment: .bottomLeading) { Star(color: .green) }
.overlay(alignment: .bottomTrailing) { Star(color: .blue) }
上麵的例子假設你已經定義了一個帶有參數化顏色的 Star
視圖:
struct Star: View {
var color = Color.yellow
var body: some View {
Image(systemName: "star.fill")
.foregroundStyle(color)
}
}
通過為每個修飾符設置不同的alignment
值,可以使星星出現在矩形的不同位置:
如果您在 content
閉包中指定多個視圖,則修飾符會將閉包中的所有視圖收集到一個隱式 ZStack
中,按從後到前的順序排列它們。例如,您可以在 ShapeStyle/blue
的字段上放置一個星號和一個 Circle
:
Color.blue
.frame(width: 200, height: 200)
.overlay {
Circle()
.frame(width: 100, height: 100)
Star()
}
覆蓋修改器和由覆蓋內容組成的隱式ZStack
(圓形和星形)都使用默認的Alignment/center
對齊方式。星星出現在圓圈的中心,兩者都顯示為以正方形為中心的合成視圖:
如果您為覆蓋指定對齊方式,它將應用於隱式堆棧而不是閉包中的各個視圖。如果添加 Alignment/bottom
對齊,您可以看到這一點:
Color.blue
.frame(width: 200, height: 200)
.overlay(alignment: .bottom) {
Circle()
.frame(width: 100, height: 100)
Star()
}
圓和星作為一個單元向下移動,以使堆棧的底部邊與正方形的底部邊對齊,而星保持在圓的中心:
要控製 content
閉包內各個項目的放置,可以為每個項目使用不同的覆蓋修飾符,如前麵矩形角上的星形示例所示,或者在內容閉包內添加顯式 ZStack
它自己的對齊方式:
Color.blue
.frame(width: 200, height: 200)
.overlay(alignment: .bottom) {
ZStack(alignment: .bottom) {
Circle()
.frame(width: 100, height: 100)
Star()
}
}
堆棧對齊確保星形的底部邊與圓形對齊,而覆蓋將複合視圖與正方形對齊:
您可以通過將修改後的視圖和覆蓋內容放入 ZStack
來實現沒有覆蓋修改器的分層。這可以生成更簡單的視圖層次結構,但會更改 SwiftUI 應用於視圖的布局優先級。當您希望修改後的視圖支配布局時,請使用疊加修飾符。
如果要指定 ShapeStyle
(如 Color
或 Material
)作為覆蓋,請改用 View/overlay(_:ignoresSafeAreaEdges:)
。要指定 Shape
,請使用 View/overlay(_:in:fillStyle:)
。
可用版本
相關用法
- Swift Never overlay(_:in:fillStyle:)用法及代碼示例
- Swift Never overlay(_:ignoresSafeAreaEdges:)用法及代碼示例
- Swift Never opacity(_:)用法及代碼示例
- Swift Never onTapGesture(count:perform:)用法及代碼示例
- Swift Never onSubmit(of:_:)用法及代碼示例
- Swift Never onChange(of:perform:)用法及代碼示例
- Swift Never offset(x:y:)用法及代碼示例
- Swift Never offset(_:)用法及代碼示例
- Swift Never pageCommand(value:in:step:)用法及代碼示例
- Swift Never colorMultiply(_:)用法及代碼示例
- Swift Never accessibilityAction(action:label:)用法及代碼示例
- Swift Never alert(isPresented:error:actions:message:)用法及代碼示例
- Swift Never confirmationDialog(_:isPresented:titleVisibility:actions:)用法及代碼示例
- Swift Never flipsForRightToLeftLayoutDirection(_:)用法及代碼示例
- Swift Never position(x:y:)用法及代碼示例
- Swift Never position(_:)用法及代碼示例
- Swift Never luminanceToAlpha()用法及代碼示例
- Swift Never accessibilityAction(_:_:)用法及代碼示例
- Swift Never previewDisplayName(_:)用法及代碼示例
- Swift Never badge(_:)用法及代碼示例
- Swift Never progressViewStyle(_:)用法及代碼示例
- Swift Never buttonStyle(_:)用法及代碼示例
- Swift Never popover(isPresented:attachmentAnchor:arrowEdge:content:)用法及代碼示例
- Swift Never projectionEffect(_:)用法及代碼示例
- Swift Never background(_:ignoresSafeAreaEdges:)用法及代碼示例
注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 Never overlay(alignment:content:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。