TabItem + AsyncImage - изображение очень большое
Я пытаюсь загрузить изображение асинхронно с помощью AsyncImage, но в результате изображение очень большое и покрывает весь экран.
TabView {
CreateView()
.tabItem {
Image(systemName: "plus.circle")
}
AccountView()
.tabItem {
let imageUrl = LoginManager.shared.profile!.profileImageUrl
ZStack {
AsyncImage(url: URL(string: imageUrl)) { phase in
switch phase {
case .empty:
ProgressView()
case .success(let image):
image.resizable()
.aspectRatio(contentMode: .fit)
.frame(maxWidth: 56, maxHeight: 56)
case .failure:
Image(systemName: "person.circle")
@unknown default:
// Since the AsyncImagePhase enum isn't frozen,
// we need to add this currently unused fallback
// to handle any new cases that might be added
// in the future:
EmptyView()
}
}
.frame(width: 50, height: 50)
}
.frame(maxWidth: 56, maxHeight: 56)
}
}
Пытался поставить границы .frame в каждом месте, но изображение очень велико!
Что я делаю неправильно?
Спасибо за помощь!
1 ответ
Я решил эту проблему с помощью ZStack. Хоть и хитрый, но вполне рабочий.
GeometryReader { geometry in
ZStack(alignment: .bottomLeading) {
TabView(selection: $myViewModel.tabSelection) {
View0().tabItem {
Image("image1")
Text("image1")
}.tag(0)
View1().tabItem {
Image("image2")
Text("image2")
}.tag(1)
View2().tabItem {
Text("AsyncImage image3 ")
}.tag(2)
}
ZStack {
Button(action: {
myViewModel.tabSelection = 2
}) {
AsyncImage(url: URL(string: "https://sample.com/a.png")){ image in
image.resizable()
.scaledToFit()
.clipShape(Circle())
.shadow(radius: 10)
.opacity(myViewModel.tabSelection == 2 ? 0.8 : 0.4)
} placeholder: {
ProgressView()
}
}
.frame(width: 30)
}
.offset(x: (geometry.size.width / 3 * 2 + geometry.size.width / 6 - 15), y: -15)
}
}