UinavigationController сломал изображение Swiftui и AsyncimageIOS

Программируем под IOS
Ответить
Anonymous
 UinavigationController сломал изображение Swiftui и Asyncimage

Сообщение Anonymous »

Я интегрирую Swiftui в uinavigationController и сталкиваюсь с странной проблемой при наживлении UihostingController , содержащего длинное изображение или asyncimage . Я хочу, чтобы изображение заняло всю ширину экрана, поэтому я использую < /p>

Код: Выделить всё

      Image("picsum-237-1900x400")
.resizable()
.scaledToFill()
.frame(height: 200)
.frame(maxWidth: .infinity)
Это отображение обычно с обычным навигационным ударом и navigationlink . Но когда я использую его с навигационным планом , изображение переполняется с экрана.

Код: Выделить всё

struct NavigationWrapper: UIViewControllerRepresentable {
@ViewBuilder let rootView: () -> Content

func makeUIViewController(context: Context) -> UINavigationController {
let navController = UINavigationController()
let hostingController = UIHostingController(
rootView: rootView().environment(\.navigationController, navController)
)
navController.pushViewController(hostingController, animated: false)
return navController
}

func updateUIViewController(_ uiViewController: UINavigationController, context: Context) {}
}

< /code>
Использование: < /p>
@main
struct MainApp: App {
var body: some Scene {
WindowGroup {
NavigationWrapper(rootView: { ProductView() })
}
}
}

struct ProductView: View {
@Environment(\.navigationController) private var navigationController

var body: some View {
VStack {
Button("Go to Product Details") {
let hostingVC = UIHostingController(rootView: ProductDetailsScreen())
navigationController?.pushViewController(hostingVC, animated: true)
}
}
.navigationTitle("Products")
}
}

struct ProductDetailsScreen: View {
var body: some View {
VStack {
Image("picsum-237-1900x400")
.resizable()
.scaledToFill()
.frame(height: 200)
.frame(maxWidth: .infinity)
Spacer()
Text("Product Details")
Spacer()
}
.navigationTitle("Details")
}
}

struct NavigationControllerKey: EnvironmentKey {
static let defaultValue: UINavigationController? = nil
}

extension EnvironmentValues {
var navigationController: UINavigationController? {
get { self[NavigationControllerKey.self] }
set { self[NavigationControllerKey.self] = newValue }
}
}

Чтобы упростить демонстрацию, я загрузил аналогичное изображение и использовать Image вместо асинтикации :

Есть ли некоторые концепции, которые мне не хватает о том, чтобы соединить Swiftui И uikit, или это ошибка в Swiftui, и есть ли обходной путь для этого?

Подробнее здесь: https://stackoverflow.com/questions/794 ... asyncimage
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»