Swiftui 相对宽度覆盖
Xcode 11 Beta 4已弃用Swiftui 相对宽度覆盖,swiftui,Swiftui,Xcode 11 Beta 4已弃用.relativeSize以及.relativeWidth和.relativeHight(请参阅) 那么,替代方案是什么呢 我想创建一个覆盖,其宽度相对于其父对象 假设我有以下主要观点 struct MainView: View { var body: some View { ZStack(alignment: .topLeading) { BackgroundView() SideBarView()
.relativeSize
以及.relativeWidth
和.relativeHight
(请参阅)
那么,替代方案是什么呢
我想创建一个覆盖,其宽度相对于其父对象
假设我有以下主要观点
struct MainView: View {
var body: some View {
ZStack(alignment: .topLeading) {
BackgroundView()
SideBarView()
.frame(idealWidth: 200)
.fixedSize(horizontal: true, vertical: false)
}
}
}
通过一个简单的背景视图
和侧边栏视图
以及预期的效果
struct SideBarView: View {
var body: some View {
Rectangle()
.foregroundColor(.green)
}
}
struct BackgroundView: View {
var body: some View {
Rectangle()
.foregroundColor(.red)
}
}
这在发行说明和中提出
如何避免像以前一样使用.relativeWidth(0.3)
而不是.frame(理想宽度:)
对这些值进行硬编码?1
1注意:使用
.relativeWidth
从未真正起作用,例如,使用0.3
作为相对值,从未产生过占父视图宽度30%的视图,但您可以通过尝试和错误来接近所需的结果。有多种方法可以实现它,一种方法是使用.overlay
而不是ZStack
。您在覆盖中使用的视图将获得父级提供的BackgroundView
的大小。然后您只需使用获得宽度并将其乘以0.7:
struct ContentView:View{
var body:一些观点{
BackgroundView().overlay(侧边栏视图())
}
}
结构侧边栏视图:视图{
var body:一些观点{
GeometryReader{中的代理
HStack{
垫片()
矩形()
.frame(宽度:proxy.size.width*0.7)
.fixedSize(水平:真,垂直:假)
.foregroundColor(.绿色)
}
}
}
}
结构背景视图:视图{
var body:一些观点{
矩形()
.foregroundColor(.red)
}
}
很有效,谢谢。虽然我觉得奇怪的是,对于一个相对普通和简单的特性来说,它是如此复杂。