Я интегрирую экран SwiftUI в приложение UIKit для tvOS. У меня есть панель вкладок в верхней части экрана. Когда приложение запускается впервые, и я переключаюсь на экран SwiftUI, оно выглядит так, как я хочу. Однако, когда я выключаюсь, а затем возвращаюсь, весь экран сдвигается вверх, и заголовок навигации скрывается под панелью вкладок, а содержимое все выше на экране. SwiftUI выглядит следующим образом:
struct SettingsVC: View {
var body: some View {
NavigationView {
HStack {
Image("fullLogo")
.resizable()
.scaledToFit()
.frame(width: 800, height: 450)
.padding()
.offset(y: -75)
List {
NavigationLink(destination: Text("Test")) {
HStack {
Image(systemName: "link")
.font(.headline)
Text("Link Account")
.font(.headline)
}
}
}
.navigationBarTitle("Settings")
}
}
}
}
Если я закомментирую NavigationView
, положение экрана останется на том же месте при переключении на другую вкладку и обратно. Однако мне нужна навигация по названию и чтобы перейти в список. Я попытался удалить другие элементы, такие как изображение, просто чтобы увидеть, если это вызывает проблемы, но это не так. При последующем выборе этого экрана кажется, что панель навигации больше не учитывается. Что может быть причиной такого поведения?
Вот часть панели вкладок, которая снова находится в UIKit.
private func setup() {
self.view.insetsLayoutMarginsFromSafeArea = false
let tvSelectionVC = TVSelectionVC()
tvSelectionVC.screenType = .live
tvSelectionVC.isFirstRun = true
let onDemandVC = TVSelectionVC()
onDemandVC.screenType = .demand
onDemandVC.isFirstRun = false
let settingsVC = SettingsVC()
let settingsHostController = UIHostingController(rootView: settingsVC)
let config = UIImage.SymbolConfiguration(pointSize: 50, weight: .bold)
tvSelectionVC.tabBarItem = UITabBarItem(title: "Live", image: nil, tag: 0)
onDemandVC.tabBarItem = UITabBarItem(title: "OnDemand", image: nil, tag: 1)
settingsHostController.tabBarItem.image = UIImage(systemName: "gear",withConfiguration: config)
let logoView = UIImageView(image: UIImage(named: "logo"))
logoView.translatesAutoresizingMaskIntoConstraints = false
tabBar.leadingAccessoryView.addSubview(logoView)
logoView.topAnchor.constraint(equalTo: tabBar.leadingAccessoryView.topAnchor).isActive = true
logoView.leadingAnchor.constraint(equalTo: tabBar.leadingAccessoryView.leadingAnchor, constant: 0).isActive = true
logoView.heightAnchor.constraint(equalToConstant: 40).isActive = true
logoView.widthAnchor.constraint(equalToConstant: 140).isActive = true
viewControllers = [tvSelectionVC,onDemandVC,settingsHostController]
}
Обновление: я могу удалить все из представления SwiftUI и иметь только Text
находится в пределах NavigationView
, и проблема все еще возникает. Я также могу изменить первую и вторую вкладки, чтобы они были пустыми UIViewControllers, и проблема все еще возникает при переключении на SwiftUI после первого раза.