Split View / Slide Over Implementation for iPad App

NOVASOLUTIONS.TECHNOLOGY is engaged in the development, support and maintenance of iOS, Android, PWA mobile applications. We have extensive experience and expertise in publishing mobile applications in popular markets like Google Play, App Store, Amazon, AppGallery and others.
Development and support of all types of mobile applications:
Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 1 of 1 servicesAll 1735 services
Split View / Slide Over Implementation for iPad App
Medium
~3-5 business days
FAQ
Our competencies:
Development stages
Latest works
  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1052
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    445

Implementing Split View / Slide Over for iPad App

iPadOS Multitasking — Split View (two apps side by side), Slide Over (app in floating window), Stage Manager (iOS 16+, windows of free size) — all this works only if the app properly supports flexible window sizes. An app deployed on iPad without Multitasking support displays with dark bars in compact mode and doesn't appear in available list for Split View — this is immediately visible as unfinished work.

What's Required for Basic Support

Enable Multitasking in Info.plist. For full Split View and Slide Over support — remove UIRequiresFullScreen = YES. If this key is set to true, the app is forced to occupy the entire screen and is unavailable for Split View.

SceneDelegate and Multiple Windows support — necessary for Stage Manager:

// Info.plist
// UIApplicationSceneManifest → UISceneConfigurations → UIWindowSceneSessionRoleApplication
// There also: UIApplicationSupportsMultipleScenes = true

AutoLayout without hardcoded sizes. This is 90% of the work. Every frame, constant, and multiplier is calculated from view.bounds — not from magic 768 or 1024.

Size Classes: traitCollection Instead of Hardcode

iPad in Split View changes horizontalSizeClass from .regular to .compact on narrow window. Code tied to UIDevice.current.userInterfaceIdiom == .pad instead of size class will break:

// Bad — device-dependent
if UIDevice.current.userInterfaceIdiom == .pad {
    showSidebar()
}

// Correct — size class-dependent
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)
    if traitCollection.horizontalSizeClass == .regular {
        showSidebar()
    } else {
        hideSidebar()
    }
}

In 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 — native component for iPad master-detail. Automatically adapts to different size classes, supports three-column layout (sidebar, content, detail) without manual management.

UISplitViewController for UIKit

For UIKit apps, UISplitViewController is the right choice. Important properties:

let split = UISplitViewController(style: .doubleColumn)
split.preferredDisplayMode = .oneBesideSecondary
split.preferredSplitBehavior = .tile
split.presentsWithGesture = true // swipe to hide sidebar

// Minimum width of primary column
split.minimumPrimaryColumnWidth = 280
split.maximumPrimaryColumnWidth = 400
split.preferredPrimaryColumnWidth = 320

style: .tripleColumn for three-column layout (mail, messages). presentsWithGesture = true allows hiding/showing sidebar with swipe — expected behavior on iPad.

Adaptation on collapse: when Split View goes into compact mode (Slide Over, narrow Split), controllers "collapse" into a stack. Override logic via delegate:

func splitViewController(
    _ svc: UISplitViewController,
    topColumnForCollapsingToProposedTopColumn proposedTopColumn: UISplitViewController.Column
) -> UISplitViewController.Column {
    // Show sidebar instead of detail on collapse if detail is empty
    if detailViewController.isEmpty {
        return .primary
    }
    return proposedTopColumn
}

Drag & Drop Between Columns

In Split View, users expect Drag & Drop — especially in productivity apps. UIDropInteraction and UIDragInteraction are added to View:

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

func dropInteraction(_ interaction: UIDropInteraction,
                     performDrop session: UIDropSession) {
    session.loadObjects(ofClass: NSString.self) { items in
        // Handle drop
    }
}

For SwiftUI — .onDrop(of:delegate:) and .draggable().

Keyboard and Pointer Support

iPad with Magic Keyboard is trackpad and keyboard. Without UIPointerInteraction (hover effects) and keyboard shortcuts, the app looks unpolished on iPad Pro.

// Keyboard shortcut
let command = UIKeyCommand(input: "N", modifierFlags: .command,
                           action: #selector(newItem),
                           discoverabilityTitle: "New item")
addKeyCommand(command)

UIMenuBuilder for adding items to system menu (Edit, View), important when working with Magic Keyboard.

Timeline Benchmarks

Task Timeline
Basic Split View support (UISplitViewController) 1–2 days
Full adaptation with size class, Drag & Drop 3–4 days
+ Stage Manager + Keyboard shortcuts +1 day
SwiftUI NavigationSplitView from scratch 2–3 days