AsyncImage не отображает URL-адрес изображения при передаче в представление
В этом дочернем представлении не отображаются URL-адреса изображений, переданные из родительского представления. Детский вид:
struct PostImageView: View {
var postImage: String
var body: some View {
AsyncImage(url: URL(string: postImage)) { image in
image
.resizable()
.aspectRatio(contentMode: .fit)
} placeholder: {
Text("IMAGE URL: \(postImage)")
ProgressView()
}
.ignoresSafeArea()
}
}
- Отображает URL-адрес изображения в представлении во время загрузки.
- Добавление статического URL-адреса изображения отображает изображение:
AsyncImage(url: URL(string: "https://url-to-image"))
Родительское представление полагается на
ObservableObject
чтобы определить, когда отображать представление, содержащее:
class ImageDetail: ObservableObject {
@Published var imageUrl = ""
@Published var showImageDetail: Bool = false
}
Эта часть родительского представления затем переходит к дочернему представлению и передает URL-адрес изображения:
NavigationLink(destination: PostImageView(postImage: imageDetail.imageUrl), isActive: $imageDetail.showImageDetail) {
EmptyView()
}
Когда
showImageDetail
является
true
, значение содержит действительный URL-адрес изображения, который затем передается в
PostImageView
содержащий
AsyncImage
.
В
imageUrl
значение успешно передается в соответствии с
Text("IMAGE URL: \(postImage)")
вывод упомянутый выше.
2 ответа
После некоторого тестирования выяснилось, что
AsyncImage
молча терпит неудачу, когда небезопасный
http
URL-адрес передается от родителя.
Я решил эту проблему, добавив функцию для обнаружения небезопасных URL-адресов http и вместо этого преобразовывая их в URL-адреса https.
Как ни странно, существует явная ошибка о запрете небезопасных URL-адресов при использовании статического URL-адреса в дочернем представлении, но не при передаче от родительского.
Если вам действительно нужно использовать http вместо https, необходимо изменить NSAppTransportSecurity в вашем info.plist
Но, похоже, вам удалось решить проблему без использования http, что лучше.