Как вызвать представление определенного размера?

#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. Спасибо, это замечательно работает