Реалізація Split View / Slide Over для iPad-додатку

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Реалізація Split View / Slide Over для iPad-додатку
Середній
~3-5 днів
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Реалізація Split View / Slide Over для iPad-програми

iPadOS Multitasking — Split View (два програми рядом), Slide Over (програма в плавучому вікні), Stage Manager (iOS 16+, вікна вільного розміру) — все це працює тільки якщо програма правильно підтримує гнучкі розміри вікна. Програма, розгорнута на iPad без підтримки Multitasking, відображається з темними смугами в компактному режимі і не попадає в список доступних для Split View — це відразу видно як недороботка.

Що потрібно для базової підтримки

Увімкнути Multitasking в Info.plist. Для повної підтримки Split View та Slide Over — видалити UIRequiresFullScreen = YES. Якщо цей ключ встановлений в true, програма примусово займає весь екран і недоступна для Split View.

SceneDelegate та підтримка Multiple Windows — необхідна для Stage Manager:

// Info.plist
// UIApplicationSceneManifest → UISceneConfigurations → UIWindowSceneSessionRoleApplication
// Там же: UIApplicationSupportsMultipleScenes = true

AutoLayout без захардкодених розмірів. Це 90% роботи. Кожен frame, constant та multiplier розраховується від view.bounds — не від магічних 768 або 1024.

Розмірні класи: traitCollection замість hardcode

iPad в Split View змінює horizontalSizeClass з .regular на .compact при вузькому вікні. Код, завязаний на UIDevice.current.userInterfaceIdiom == .pad замість size class, сломається:

// Погано — завязка на пристрій
if UIDevice.current.userInterfaceIdiom == .pad {
    showSidebar()
}

// Правильно — завязка на size class
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)
    if traitCollection.horizontalSizeClass == .regular {
        showSidebar()
    } else {
        hideSidebar()
    }
}

У SwiftUI — @Environment(\.horizontalSizeClass):

struct ContentView: View {
    @Environment(\.horizontalSizeClass) var sizeClass

    var body: some View {
        if sizeClass == .regular {
            NavigationSplitView {
                SidebarView()
            } detail: {
                DetailView()
            }
        } else {
            NavigationStack {
                MainView()
            }
        }
    }
}

NavigationSplitView — нативний компонент для iPad master-detail. Автоматично адаптується під різні size class, підтримує три-колоночний layout (sidebar, content, detail) без ручного управління.

UISplitViewController для UIKit

Для UIKit-програм UISplitViewController — правильний вибір. Важливі властивості:

let split = UISplitViewController(style: .doubleColumn)
split.preferredDisplayMode = .oneBesideSecondary
split.preferredSplitBehavior = .tile
split.presentsWithGesture = true // свайп для скриття sidebar

// Мінімальна ширина primary колонки
split.minimumPrimaryColumnWidth = 280
split.maximumPrimaryColumnWidth = 400
split.preferredPrimaryColumnWidth = 320

style: .tripleColumn для трьохколоночного layout (пошта, сообщения). presentsWithGesture = true дозволяє скривати/показувати sidebar свайпом — очікуване поведення на iPad.

Адаптація при колапсі: коли Split View йде в компактний режим (Slide Over, вузький Split), контролери «сворачуються» в стек. Переопределяємо логіку через делегат:

func splitViewController(
    _ svc: UISplitViewController,
    topColumnForCollapsingToProposedTopColumn proposedTopColumn: UISplitViewController.Column
) -> UISplitViewController.Column {
    // Показувати sidebar замість detail при collapse, якщо detail пуст
    if detailViewController.isEmpty {
        return .primary
    }
    return proposedTopColumn
}

Drag & Drop між колонками

У Split View користувачі очікують Drag & Drop — особливо в продуктивних програмах. UIDropInteraction та UIDragInteraction додаються до View:

let dropInteraction = UIDropInteraction(delegate: self)
targetView.addInteraction(dropInteraction)

func dropInteraction(_ interaction: UIDropInteraction,
                     performDrop session: UIDropSession) {
    session.loadObjects(ofClass: NSString.self) { items in
        // Обробляємо дроп
    }
}

Для SwiftUI — .onDrop(of:delegate:) та .draggable().

Keyboard та Pointer підтримка

iPad з Magic Keyboard — це трекпад та клавіатура. Без UIPointerInteraction (hover эффекти) та keyboard shortcuts програма виглядає непроробленою на iPad Pro.

// Keyboard shortcut
let command = UIKeyCommand(input: "N", modifierFlags: .command,
                           action: #selector(newItem),
                           discoverabilityTitle: "Новий елемент")
addKeyCommand(command)

UIMenuBuilder для додавання пунктів в системне меню (Edit, View), що важливо при роботі з Magic Keyboard.

Ориентири по срокам

Завдання Срок
Базова Split View підтримка (UISplitViewController) 1–2 дні
Повна адаптація з size class, Drag & Drop 3–4 дні
+ Stage Manager + Keyboard shortcuts +1 день
SwiftUI NavigationSplitView з нуля 2–3 дні