swift - 将视图传递给自定义 swiftui 容器视图
问题描述
我正在 swiftui 中创建一个自定义容器视图——我希望它能够缩放你放入其中的视图——但它似乎没有像我预期的那样工作,只是想知道我做错了什么。
编码:
struct SplitView<Left:View, Right:View>: View
{
@State var left : () -> Left
@State var right : () -> Right
@State var splitterWidth = 10
@State var splitterLocation = 120
var body: some View
{
GeometryReader()
{
geometry in
HStack( spacing:0)
{
left().frame( width:CGFloat(splitterLocation), height: geometry.size.height)
Text(" ").frame( width : CGFloat( splitterWidth), height : CGFloat( geometry.size.height))
.background(Color.yellow)
right().frame(width: geometry.size.width - CGFloat( self.splitterWidth + self.splitterLocation), height: geometry.size.height)
.background(Color.red)
}
}
}
}
struct SplitView_Previews: PreviewProvider
{
static var previews: some View
{
SplitView( left: {Text("green").background(Color.green)},
right: {Text("red")})
.frame(width:300, height:300)
}
}
产生:
我希望它将内部视图正确地缩放到分配给它们的空间(并在拖动拆分器时调整它们的大小)-但是背景颜色证明了问题-绿色显然不是我们想要的。我如何传递视图以获得所需的结果(即,我传入的任何内容都被调整大小以填充容器)
解决方案
可以达到你预期的效果
SplitView(
left: {
Text("green")
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.green)
},
right: {Text("red")}
).frame(width:300, height:300)
默认情况下,SwiftUI 视图打算缩小为内在内容。
推荐阅读
- excel - 从 2010 年到 2016 年的 VBA:复制/粘贴不带分隔符的文本,即使它包含分隔符
- javascript - Extjs - 树面板根据条件折叠和展开
- javascript - 导致 JQuery 函数失败的隐藏字符
- c# - 非异步调用异步方法时出错
- r - 循环到通过矩阵
- r - rmarkdown/bookdown:即时编辑 `metadata$abstract`?
- linux - 在 ASLR 系统上运行非位置无关的可执行文件
- image - facebook如何在聊天框中检测带有url的图像
- c# - 使用 ITextSharp 将 HTML 页面转换为 PDF 时缺少 CSS 样式
- logging - gwt 日志记录不起作用