Я пытаюсь создать обычный вид с цветом фона в SwiftUI. Но все, что я могу найти, это элементы, которые не являются простыми представлениями, такими как текст, кнопка, изображение, список и т. д.
Когда я пытаюсь использовать View, он показывает мне следующие сообщения об ошибках:
- 'View' cannot be constructed because it has no accessible initializers
- 'View' Protocol can only be used as a generic constraint because it has Self or associatedType requirements
Как создать прямоугольный вид с фоновым цветом?





Просто используйте Rectangle()
Как говорится в Документация:
A rectangular shape aligned inside the frame of the view containing it.
Вот пример прямоугольника с фиксированным размером и цветом фона
Rectangle()
.size(CGSize(width: 10, height: 10))
.foregroundColor(.red)
Как было предложено в другом ответе, вы можете использовать Shape как Rectangle() и установить его size и foregroundColor:
Rectangle()
.size(CGSize(width: 10, height: 10))
.foregroundColor(.blue)
Но я думаю, что использовать Color напрямую проще:
Color.blue
.frame(width: 10, height: 10)
На всякий случай, если ваш вариант использования — это что-то вроде создания фона для представления TextField, вот демонстрация того, как я это сделал.
В приведенном здесь примере будет создано небольшое представление с непрозрачным вторичным фоном, а затем отобразится поверх него метка, указывающая, что пользователь должен ввести местоположение, еще один белый прямоугольник со скругленными углами и текстовое поле TextField() внутри белого прямоугольника.
struct InputView : View {
@State var text: String
var body: some View {
ZStack{
RoundedRectangle(cornerRadius: 15).frame(width: 310, height: 100)
.foregroundColor(.secondary)
.offset(y: -20)
ZStack{
RoundedRectangle(cornerRadius: 30).frame(width: 290, height: 40)
.foregroundColor(.white)
TextField($text, placeholder: Text("City, State, Address")) {
print(self.text)
self.didEnter.toggle()
}
.frame(width: 220, height: 40, alignment: .leading)
.offset(x: -20)
Text("Select Location:").bold().fontWeight(.medium)
.offset(y: -40)
.foregroundColor(.white)
}
}
}
}
Это еще один способ создания чего-то вроде UIView. В SwiftUI каждое примитивное представление работает как UIView.
struct CustomView : View {
var body: some View {
ZStack{
Color.red.frame(width: 300, height: 300)
Text("This is view")
}
}
}