struct DottedLine: Shape {
func path(in rect: CGRect) -> Path {
var path = Path()
path.move(to: CGPoint(x: 0, y: 0))
path.addLine(to: CGPoint(x: rect.width, y: 0))
return path
}
}
DottedLine()
.stroke(style: StrokeStyle(lineWidth: 1, dash: [2]))
.frame(height: 1)
.foregroundColor(Color.red)
Это создаст горизонтальную пунктирную линию. Но как сделать его вертикальным? Если я помещу Divider() в HStack, он станет вертикальным, но как добиться того же с пунктирной линией?
Заставьте DottedLine
реагировать как на ширину, так и на высоту и настройте по мере необходимости вместо использования:
struct DottedLine: Shape {
func path(in rect: CGRect) -> Path {
var path = Path()
path.move(to: CGPoint(x: 0, y: 0))
path.addLine(to: CGPoint(x: rect.width, y: rect.height))
return path
}
}
struct TestDottedLineView: View {
var body: some View {
DottedLine()
.stroke(style: StrokeStyle(lineWidth: 1, dash: [2]))
.frame(width: 1, height: 100)
.foregroundColor(Color.red)
}
}
Измените path.addLine(на: CGPoint(x: rect.width, y: rect.height)) на: path.addLine(на: CGPoint(x: 0, y: rect.height)). В противном случае линия имеет небольшой изгиб вправо.
Вау, это было так просто, не знаю, почему мой разум не сработал.