Я использую SwiftUI для создания виджета, и я борюсь с чем-то довольно простым и понятным в Swift.
У меня есть 2 изображения, которые находятся рядом друг с другом, и я хочу, чтобы они были одинакового размера с заливкой соотношения сторон, но без выхода за границы.
На данный момент это работает так: у меня есть представление, которое представляет собой изображение и текст. И затем родительский вид, у которого есть HStack с двумя из этих представлений.
В основном я хочу добиться этого представления, но с правильными изображениями:
Делается это так:
VStack() {
Image(uiImage: image)
.resizable()
Text(affirmation.title)
.font(.body)
.foregroundColor(Color(UIColor.MAPurple()))
}
}
И для родительского представления:
HStack {
Spacer()
CardView(text: text, image: firstImage)
Spacer()
CardView(text: text, image: secondImage)
Spacer()
}
Если я добавлю соотношение сторон для заливки, как в Swift, это будет выглядеть так:
Обновить
Добавляем минимально воспроизводимый пример:
struct CardView: View {
let text: String
let image: UIImage
var body: some View {
VStack(alignment: .leading) {
Image(uiImage: image)
.resizable()
// .aspectRatio(contentMode: .fill)
.clipped()
Text(text)
.font(.body)
.multilineTextAlignment(.leading)
.foregroundColor(Color.blue)
}
}
}
struct ParentView: View {
let firstText: String = "This is something"
let firstImage: UIImage
let secondText: String = "This is something else"
let secondImage: UIImage
let top: String = "This is the top string"
var body: some View {
VStack {
Spacer()
Spacer()
Text(top)
.font(.largeTitle)
.foregroundColor(Color(UIColor.MAPurple()))
.padding(.all, 10)
.minimumScaleFactor(0.4)
Spacer()
Spacer()
HStack {
Spacer()
CardView(text: firstText, image: firstImage)
Spacer()
CardView(text: secondText, image: secondImage)
Spacer()
}
Spacer()
Spacer()
}
.background(Color.yellow)
.edgesIgnoringSafeArea(.all)
}
}