#swift #swiftui #uikit
#swift #swiftui #uikit
Вопрос:
У меня есть UIViewRepresentable
, который используется NSAttributedString
для установки обводки заданного текста.
Это работает нормально, за исключением одного: текст не имеет заливки — только обводка.
struct StrokedText: UIViewRepresentable {
let text: String
let width: CGFloat
let color: Color
let fontSize: CGFloat
func makeUIView(context: Context) -> UILabel {
let attributedStringParagraphStyle = NSMutableParagraphStyle()
attributedStringParagraphStyle.alignment = NSTextAlignment.center
let attributedString = NSAttributedString(
string: text,
attributes:[
NSAttributedString.Key.paragraphStyle: attributedStringParagraphStyle,
NSAttributedString.Key.strokeWidth: fontSize * 0.05,
NSAttributedString.Key.foregroundColor: UIColor.white,
NSAttributedString.Key.strokeColor: UIColor(color),
NSAttributedString.Key.font: UIFont(name:"Coiny-Regular", size: fontSize)!
]
)
let strokeLabel = UILabel(frame: CGRect.zero)
strokeLabel.attributedText = attributedString
strokeLabel.backgroundColor = UIColor.clear
strokeLabel.sizeToFit()
strokeLabel.center = CGPoint.init(x: 0.0, y: 0.0)
return strokeLabel
}
func updateUIView(_ uiView: UILabel, context: Context) {}
}
Использование:
struct MyView: View {
var body: some View {
GeometryReader { geo in
StrokedText(text: "STORE", width: 0.5, color: Color.black, fontSize: geo.size.width * 0.08)
}
}
}
Если .foregroundColor
не работает, как я могу установить цвет заливки для текста?
Ответ №1:
Это потому, что вы устанавливаете цвет обводки для своего текста. Все, что вам нужно, это установить отрицательное значение для вашего штриха:
.strokeWidth: fontSize * -0.05