Угловой радиус пользовательской формы SwiftUI

#swiftui #path #shapes

Вопрос:

Я пытаюсь создать пользовательскую фигуру, которая по сути является круглым прямоугольником, но в верхней строке немного отсутствует, поэтому она подходит для любого заполнителя, который я хочу в текстовом поле . И все это прекрасно работает, проблема в том, что я, похоже, не могу применить .cornerRadius к этой пользовательской форме, потому что, похоже, она всегда обрезает форму, у кого-нибудь есть какие-либо идеи? Я перепробовал все, кроме рисования пользовательских квадратичных фигур, чтобы просто закруглить углы.

введите описание изображения здесь

Это моя индивидуальная форма

 struct RoundRectanglePlaceholder: Shape {    let placeholder: String  let text: String    func path(in rect: CGRect) -gt; Path {    var path = Path()    if text.isEmpty {  return RoundedRectangle(cornerRadius: 6).path(in: rect)    } else {  let placeholderSize = placeholder.widthOfString(usingFont: .systemFont(ofSize: 13))    path.move(to: .init(x: rect.minX, y: rect.maxY))  path.addLine(to: .init(x: rect.maxX, y: rect.maxY))  path.addLine(to: .init(x: rect.maxX, y: rect.minY))  path.addLine(to: .init(x: rect.minX   placeholderSize   20, y: rect.minY))    path.move(to: .init(x: rect.minX, y: rect.maxY))  path.addLine(to: .init(x: rect.minX, y: rect.minY))  path.addLine(to: .init(x: rect.minX   10 , y: rect.minY))  }    return path  } }  

И вот как я его использую

 struct TextFieldView: View {    let title: String  @State var text: String    var body: some View {  ZStack(alignment: .leading) {  Text(title)  .foregroundColor(text.isEmpty ? Color(.placeholderText) : .purple)  .offset(y: text.isEmpty ? 0 : -30)  .offset(x: text.isEmpty ? 0 : 5)  .scaleEffect(text.isEmpty ? 1 : 0.75, anchor: .leading)  .padding([.top, .leading, .bottom], 12)    TextField("", text: $text)  .accentColor(.purple)  .padding([.top, .leading, .bottom], 12)  }  .animation(.spring(response: 0.3, dampingFraction: 0.7), value: text)  .overlay(  RoundRectanglePlaceholder(placeholder: title, text: text)  .stroke(Color.gray, style: StrokeStyle(lineWidth: 1, lineCap: .round))  .clipShape(RoundedRectangle(cornerRadius: 6, style: .continuous))  )  } }  

Комментарии:

1. Почему бы просто не использовать RoundedRectangle() и фон того же цвета, что и ваш фон для текстового поля на Text() ?