Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swiftui 如何创建仅显示线栅格的自定义视图?_Swiftui - Fatal编程技术网

Swiftui 如何创建仅显示线栅格的自定义视图?

Swiftui 如何创建仅显示线栅格的自定义视图?,swiftui,Swiftui,我正在制作一个测试应用程序,看看使用SwiftUI是什么感觉,我希望我的测试应用程序有一个自定义视图,它是一个垂直线网格,间距指定为状态变量 然而,我不知道如何在一个似乎没有自定义绘图方法的UI系统中做到这一点 导入快捷键 结构GridBackgroundView:视图{ @状态变量水平间距:CGFloat=48 @状态变量垂直间距:CGFloat=48 @状态变量anchor:anchor.Source=.center var水平网格线数:UInt{ 还什么? } 垂直网格线的变量数:UInt

我正在制作一个测试应用程序,看看使用SwiftUI是什么感觉,我希望我的测试应用程序有一个自定义视图,它是一个垂直线网格,间距指定为状态变量

然而,我不知道如何在一个似乎没有自定义绘图方法的UI系统中做到这一点

导入快捷键 结构GridBackgroundView:视图{ @状态变量水平间距:CGFloat=48 @状态变量垂直间距:CGFloat=48 @状态变量anchor:anchor.Source=.center var水平网格线数:UInt{ 还什么? } 垂直网格线的变量数:UInt{ 还什么? } var body:一些观点{ 团体{ ForEach0…水平网格线数{uuu}in //什么? } ForEach0…垂直网格线的数目{uuu}in //什么? } } } } 如果调试 结构GridView\u预览:PreviewProvider{ 静态var预览:一些视图{ 网格背景视图 } } 恩迪夫
我不知道该把什么东西放在抽屉里?地区。SwiftUI中没有内置的线视图,而且我一辈子都无法确定视图的宽度,因为这不是SwiftUI中视图的一部分?

您可以通过组合分隔符和分隔符来实现

var body:一些观点{ ZStack{ HStack{ 间隔棒 矩形。框宽:1 间隔棒 分隔器 间隔棒 } VStack{ 间隔棒 分隔器 间隔棒 分隔器 间隔棒 } } } 您也可以使用矩形代替分隔符,并查看

upd:如果需要具有固定大小单元的网格,可以使用GeometryReader计算行数,并相应地组织ForEach

变量cellSize:CGFloat=48 var body:一些观点{ GeometryReader{中的几何体 ZStack{ HStack{
ForEach0..您可以通过组合垫片和分隔器来实现

var body:一些观点{ ZStack{ HStack{ 间隔棒 矩形。框宽:1 间隔棒 分隔器 间隔棒 } VStack{ 间隔棒 分隔器 间隔棒 分隔器 间隔棒 } } } 您也可以使用矩形代替分隔符,并查看

upd:如果需要具有固定大小单元的网格,可以使用GeometryReader计算行数,并相应地组织ForEach

变量cellSize:CGFloat=48 var body:一些观点{ GeometryReader{中的几何体 ZStack{ HStack{
ForEach0..您可以使用Path使用SwiftUI进行自定义绘图

要绘制网格,可以使用类似以下内容:

结构ContentView:View{ 变量水平间距:CGFloat=48 变量垂直间距:CGFloat=48 var body:一些观点{ GeometryReader{中的几何体 路径{Path in 设numberOfHorizontalGridLines=Intgeometry.size.height/self.verticalSpacing 设numberOfVerticalGridLines=Intgeometry.size.width/self.horizontalSpacing 对于0…numberOfVerticalGridLines中的索引{ 设vOffset:CGFloat=CGFloatindex*self.horizontalSpacing path.moveto:CGPointx:vOffset,y:0 path.addLineto:CGPointx:vOffset,y:geometry.size.height } 对于0…numberOfHorizontalGridLines中的索引{ let hOffset:CGFloat=CGFloatindex*自垂直间距 path.moveto:CGPointx:0,y:hOffset path.addLineto:CGPointx:geometry.size.width,y:hOffset } } (打、击等的)一下 } } }
您可以使用Path使用SwiftUI进行自定义绘图

要绘制网格,可以使用类似以下内容:

结构ContentView:View{ 变量水平间距:CGFloat=48 变量垂直间距:CGFloat=48 var body:一些观点{ GeometryReader{中的几何体 路径{Path in 设numberOfHorizontalGridLines=Intgeometry.size.height/self.verticalSpacing 设numberOfVerticalGridLines=Intgeometry.size.width/self.horizontalSpacing 对于0…numberOfVerticalGridLines中的索引{ 设vOffset:CGFloat=CGFloatindex*self.horizontalSpacing path.moveto:CGPointx:vOffset,y:0 path.addLin eto:CGPointx:vOffset,y:geometry.size.height } 对于0…numberOfHorizontalGridLines中的索引{ let hOffset:CGFloat=CGFloatindex*自垂直间距 path.moveto:CGPointx:0,y:hOffset path.addLineto:CGPointx:geometry.size.width,y:hOffset } } (打、击等的)一下 } } }
这可以通过ZStack实现,ZStack允许您将其中的视图彼此叠加渲染

     ZStack {
        HStack(spacing: horizontalSpacing) {
            ForEach(0 ..< Int(numberOfVerticalGridLines)) { _ in
                Rectangle().fill(Color.gray).frame(width: 1)
            }
        }
        VStack(spacing: verticalSpacing) {
            ForEach(0 ..< Int(numberOfHorizontalGridLines)) { _ in
                Rectangle().fill(Color.gray).frame(height: 1)
            }
        }
    }

这可以通过ZStack实现,ZStack允许您将其中的视图彼此叠加渲染

     ZStack {
        HStack(spacing: horizontalSpacing) {
            ForEach(0 ..< Int(numberOfVerticalGridLines)) { _ in
                Rectangle().fill(Color.gray).frame(width: 1)
            }
        }
        VStack(spacing: verticalSpacing) {
            ForEach(0 ..< Int(numberOfHorizontalGridLines)) { _ in
                Rectangle().fill(Color.gray).frame(height: 1)
            }
        }
    }

我尝试了你的第二个答案,并在ZStack上得到了这个结果:无法将'ZStack'类型的值转换为闭包结果类型'。'我尝试了你的第二个答案,并在ZStack上得到了这个结果:无法将'ZStack'类型的值转换为闭包结果类型'。'谢谢你的回答!使用矩形很有意思。欢迎。但我可以知道为什么你会觉得它很有意思吗?哦,我只是没想到在线条上使用矩形。这是有道理的,但我担心未来的苹果平台可能会在矩形或其他东西上有一些强制性的填充,希望你能给出答案!使用矩形很有意思。欢迎。但我可以知道为什么你会觉得它很有意思吗?哦,我只是没想到在线条上使用矩形。这是有道理的,但我担心未来的苹果平台可能会在矩形或其他东西上有一些强制性的填充