РЕДАКТИРОВАНИЕ: Размер тире 10 в примере кода является произвольным. Размер тире выглядит хорошо.
Предположим, в 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) Чтобы создать вид, используя вместо этого две зеркально отраженные фигуры... (но это все равно приведет к усечению... только на этот раз это будет симметричное усечение).
Б) Сделайте что-то вроде радиального градиента «солнечных лучей» и сложите два скругленных прямоугольника таким образом, чтобы создать иллюзию, что у нас есть пунктирный контур... (но «орел и решка» этих линий не будут перпендикулярно траектории контура, поскольку все «солнечные лучи» исходят из одной точки)
C) Использование параметрического уравнения для белка (белка, потому что суперэллипс выглядит как дерьмо, IMO, если он прямоугольный) (которое нужно будет разрезать пополам и растянуть, как лимузин) и создать из него путь, а затем нарисовать тире в виде прерывистых линий вдоль этого пути, используя t = 2 * (pi) / некоторый делитель для определения разрешения. Проблема в том, что модифицированная (лимузинная) форма будет кусочной функцией и, следовательно, не может управляться t. Кроме того, даже если бы это было возможно, тире не были бы одинаковыми по размеру по очевидным причинам, которые я не могу выразить словами.
Как это можно сделать??
Мобильная версия