Предположим, в SwiftUI вы хотите иметь собственный элемент списка с пунктирным контуром, который будет служить «подсказкой для добавления элемента».
Итак, вы используете StrokeBorder следующим образом:
struct ContentView: Просмотр { let items:[String] = ["a","b","c"] @State var itemsEmpty = false var body: some View { Text("переключатель").onTapGesture { itemsEmpty.toggle() } ВСтек { Разделитель() если !itemsEmpty { Список{ ForEach(items, id: \.self) {элемент в Текст(пункт) } } } еще { // Представление "Подсказка по элементу списка" Список{ Текст("ДОБАВИТЬ") .listRowBackground( RoundedRectangle(cornerSize: CGSize(ширина: 15, высота: 15)) .strokeBorder(стиль: StrokeStyle(lineWidth: 4, тире: [10])) ) } } Разделитель() } .padding() } } Что приводит к следующему:

Тот же метод используется в этом примере Apple, но он меня не устраивает, поскольку строки (по понятным причинам) распределены неравномерно, и мы получаем неприятное усечение в точке переноса.
Единственные (также неудовлетворительные) способы решения этой проблемы:
A) Чтобы создать вид, используя вместо этого две зеркально отраженные фигуры... (но это все равно приведет к усечению... только на этот раз это будет симметричное усечение).
Б) Сделайте что-то вроде радиального градиента «солнечных лучей» и сложите два скругленных прямоугольника таким образом, чтобы создать иллюзию, что у нас есть пунктирный контур... (но «орел и решка» этих линий не будут перпендикулярно траектории контура, поскольку все «солнечные лучи» исходят из одной точки)
Как это можно сделать??
Мобильная версия