#swift #swiftui
Вопрос:
У меня есть вопрос о представлениях в swiftui.
Я создал файл CircleView, который показывает мне круг и текст в середине. Кроме того, я создал список в contentView и подробный обзор для получения подробной информации. Теперь я использую созданный круг в списке и в подробном представлении. К сожалению, размер круга определен в виде круга, и я не знаю, как изменить его по отдельности, чтобы он отображался маленьким в списке и использовал всю ширину в подробном представлении. Итак, как я могу изменить размер представления по отдельности?
Вот мой код
Круговой обзор:
struct CircleView: View { var body: some View { ZStack{ Circle() .fill(Color.blue) .frame(width: 250, height: 250) Text("VIEW") .frame(width: 100, height: 100) .font(.largeTitle) .foregroundColor(.white) } } }
Представление содержимого:
struct ContentView: View { var body: some View { NavigationView { List{ NavigationLink(destination: DetailsView()) { HStack{ Text("Hello") Spacer() CircleView() } }.navigationTitle("Home") } } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
Детальный обзор:
struct DetailsView: View { var body: some View { VStack{ Text("Hello, World!") .padding(10) CircleView() } } }
Комментарии:
1. У вас есть несколько вариантов здесь. 1) выньте кадр из CircleView и определите его в contentView и DetailView в качестве модификатора CircleView(). Или 2) создайте переменную ширины и высоты в структуре CircleView со значением по умолчанию (например, 250 и 250), а затем передайте альтернативное значение всякий раз, когда вы хотите не использовать значение по умолчанию.
Ответ №1:
Вы должны удалить установленную рамку из своего представления и применить ее при использовании своего представления.
Ваш код отредактирован:
struct Sample: View { var body: some View { NavigationView { List{ NavigationLink(destination: DetailsView()) { HStack{ Text("Hello") Spacer() CircleView() .frame(width: 100 , height: 100) // lt;-- Update frame here } }.navigationTitle("Home") } } } } struct CircleView: View { var body: some View { ZStack{ Circle() .fill(Color.blue) Text("VIEW") .font(.largeTitle) .foregroundColor(.white) } } } struct Sample_Previews: PreviewProvider { static var previews: some View { Sample() } } struct DetailsView: View { var body: some View { VStack{ Text("Hello, World!") .padding(10) CircleView().padding() } } }
Комментарии:
1. Спасибо, это замечательно работает