以下应该创建一个Text
,其边界占据了整个屏幕,但似乎无济于事。
struct ContentView: View {
var body: some View {
Text("foo")
.relativeSize(width: 1.0, height: 1.0)
.background(Color.red)
}
}
以下黑客:
extension View {
/// Causes the view to fill into its superview.
public func _fill(alignment: Alignment = .center) -> some View {
GeometryReader { geometry in
return self.frame(
width: geometry.size.width,
height: geometry.size.height,
alignment: alignment
)
}
}
}
struct ContentView2: View {
var body: some View {
Text("foo")
._fill()
.background(Color.red)
}
}
但是似乎可以正常工作。
这是带有relativeSize
的SwiftUI错误,还是我遗漏了一些东西?
答案 0 :(得分:4)
另一种可能性是在scaledToFill
上使用ZStack
。这样会产生相同的效果,但读取效果可能会好一些。
var body: some View {
ZStack {
Color.red
Text("Hello")
}.scaledToFill()
}
答案 1 :(得分:2)
您需要观看WWDC 2019 Session 237: Building Custom Views with SwiftUI,因为Dave Abrahams讨论了该主题,并在示例中使用了Text
。
要简短地重申Dave详细解释的内容,
因此,您不能强迫小的Text
填满屏幕,因为Text
会拒绝消耗超出其内容容纳空间的空间。
如果希望红色背景填充屏幕,可以将Text
包裹在可扩展视图中,将可扩展视图强制为完整大小,然后设置可扩展视图的背景。这有效:
var body: some View {
ZStack {
Spacer()
Text("Hello")
}
.background(Color.red)
}
Spacer
接受其父级提供的任何大小,因此ZStack
不能缩小到Text
的大小。