В iOS 18 и более ранних версиях экран просмотра файлов работает в полноэкранном режиме, а нижняя панель вкладок не отображается.
В iOS 26, когда я открываю файл, нижняя панель вкладок становится видимой на экране средства просмотра файлов (похоже, средство просмотра файлов не полностью покрывает панель вкладок/изменилась безопасная область). Эта проблема не воспроизводится в iOS 18.
Я хочу, чтобы одинаковое поведение во всех версиях: когда открывается средство просмотра файлов, нижняя панель вкладок должна быть скрыта (или средство просмотра файлов всегда должно быть полноэкранным).
Что я делаю
Когда загрузка завершается, я вызываю openFile(url:mimeType:). В зависимости от типа файла я создаю новую вкладку (контроллер представления), затем переключаюсь на нее.
Код: Выделить всё
final class BaseTabViewController: UIViewController {
var containerView: UIView!
var tabIndex: Int { max(TabStore.shared.index(of: self), 0) }
func openFile(fileUrl: URL?, mimeType: String) {
guard let fileUrl else { return }
guard FileManager.default.fileExists(atPath: fileUrl.path) else { return }
DispatchQueue.main.async {
var animatedSwitch = true
// If this was a temporary “blank download tab”, close it first
if let webVC = self as? WebTabViewController,
webVC.lastFinishedURL == nil || webVC.lastFinishedURL == webVC.initialURL {
animatedSwitch = false
self.closeCurrentTabSoon()
}
if FileUtil.isOfficeFile(fileUrl, mimeType: mimeType) {
self.openOfficeFile(url: fileUrl, withAnimation: animatedSwitch)
} else {
self.openWebViewFile(url: fileUrl, mimeType: mimeType, withAnimation: animatedSwitch)
}
}
}
private func openOfficeFile(url: URL, withAnimation: Bool) {
guard let vc = TabStore.shared.insertNewTab(after: tabIndex, type: OfficeFileViewController.self) else { return }
vc.fileUrl = url
switchToTab(at: tabIndex + 1, animated: withAnimation)
}
private func openWebViewFile(url: URL, mimeType: String, withAnimation: Bool) {
guard let vc = TabStore.shared.insertNewTab(after: tabIndex, type: AttachmentViewController.self) else { return }
vc.fileUrl = url
vc.mimeType = mimeType
switchToTab(at: tabIndex + 1, animated: withAnimation)
}
private func switchToTab(at index: Int, animated: Bool) {
TabStore.shared.currentIndex = index
presentingViewController?.dismiss(animated: false, completion: nil)
}
private func closeCurrentTabSoon() {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
TabStore.shared.closeTab(at: TabStore.shared.index(of: self))
self.presentingViewController?.dismiss(animated: false, completion: nil)
}
}
}
На iOS 26 нижняя панель вкладок видна, когда отображается OfficeFileViewController или AttachmentViewController.
Ожидается
Экран просмотра файлов должен быть полноэкранным, а панель вкладок скрыта, как в iOS 18.
/>Реально
В iOS 26 панель вкладок отображается при просмотре файла.
Вопрос
Как правильно заставить вкладку просмотра файлов скрывать панель вкладок/переключаться в полноэкранный режим в разных версиях iOS?
- Должен ли я устанавливать определенный modalPresentationStyle где-нибудь?
- Или правильное решение — скрыть панель вкладок в viewWillAppear контроллеров просмотра файлов?
- Есть ли изменение поведения iOS 26, которое делает панели вкладок видимыми, если они не скрыты явно?
Подробнее здесь: https://stackoverflow.com/questions/798 ... t-on-ios-1
Мобильная версия