iPadOS:关键概念、iPad 开发和 Apple Pencil

作者: IT Sectr 发布日期: 2026-02-07 阅读时间: 12 分钟

iPadOS — 苹果公司为 iPad 开发的操作系统,于 2019 年从 iOS 分离。iPad 开发考虑了独特的功能:Split View 和 Stage Manager 多任务处理、低延迟的 Apple Pencil 输入和桌面版 Safari。

要点

  • iPadOS — iOS 的分支,具有扩展的多任务处理和 Apple Pencil 支持
  • 多任务处理包括 Split View、Slide Over、Stage Manager 和外接显示器
  • Apple Pencil — 延迟 9–20 毫秒的手写笔,支持 PencilKit 和 hover API
  • 界面适配使用 Size Classes(regular/compact)和 UISplitViewController
  • Safari 在 iPadOS 上以桌面模式运行,带有下载管理器

什么是 iPadOS?

iPadOS — 苹果公司为 iPad 开发的操作系统,于 2019 年首次作为 iOS(版本 13)的分支发布。在此之前,iPad 使用与 iPhone 相同的 iOS。iPadOS 的分离使苹果能够实现针对大屏幕的特定功能:多任务处理、桌面版 Safari、Drag & Drop 和外接显示器支持。

iPadOS 保持与 iOS 应用的完全兼容:任何 iPhone 应用都可以在 iPad 上以缩放模式运行。然而,为了获得高质量的用户体验,需要进行适配:使用 Size Classes、UISplitViewController 和支持键盘快捷键。根据苹果的数据(WWDC 2025),用户在 iPad 上 80% 的时间花在平板版本上,而不是缩放版本。

iPadOS 版本历史

iPadOS 13(2019)带来了 Slide Over 和 Split View。iPadOS 14(2020)添加了 Apple Pencil Scribble 和紧凑型 UI。iPadOS 15(2021)引入了 Quick Note 和多任务处理改进。iPadOS 16(2022)推出了 Stage Manager 和外接显示器支持。iPadOS 17(2023)添加了交互式小部件和 Lock Screen 自定义。

iPadOS 版本年份关键创新
iPadOS 132019Slide Over、Split View、桌面版 Safari
iPadOS 142020Apple Pencil 的 Scribble、紧凑型通话
iPadOS 152021Quick Note、改进的多任务管理器
iPadOS 162022Stage Manager、6K 外接显示器
iPadOS 172023交互式小部件、Lock Screen
iPadOS 182024Math Notes 计算器、Smart Script

iPadOS 架构与 iOS 的区别

iPadOS 基于与 iOS 相同的 XNU 内核和 Darwin,但使用了修改后的 UIKit shell,适用于多窗口和任意屏幕尺寸。关键的架构区别 — 支持 UIScene,该功能在 iOS 13 中引入。

UIScene 和窗口生命周期

在 iPadOS 中,每个窗口(包括 Split View 中的窗口)都是一个独立的 UISceneSession,具有自己的生命周期。与 iPhone 不同,一个应用程序只有一个 UIWindowScene,在 iPad 上,一个应用程序可以有多个 UIScene(多个窗口、Slide Over、Stage Manager)。SceneDelegate 独立管理每个窗口的状态。

swift
import UIKit
import SwiftUI

/// SceneDelegate 用于在 iPadOS 上支持多个窗口
class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?
    var splitVC: UISplitViewController?

    func scene(_ scene: UIScene,
                 willConnectTo session: UISceneSession,
                 options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = (scene as? UIWindowScene) else { return }

        // 为平板导航创建 UISplitViewController
        let splitVC = UISplitViewController(style: .tripleColumn)
        splitVC.primaryBackgroundStyle = .sidebar

        let sidebar = SidebarViewController()
        let primary = PrimaryViewController()
        let detail = DetailViewController()

        splitVC.viewControllers = [sidebar, primary, detail]

        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = splitVC
        window.makeKeyAndVisible()
        self.window = window
    }

    // 窗口大小变化时的适配(Split View)
    func windowScene(_ windowScene: UIWindowScene,
                     didUpdate previousCoordinateSpace: UICoordinateSpace,
                     interfaceOrientation previousOrientation: UIInterfaceOrientation) {
        let isMultitasking = windowScene.traitCollection.horizontalSizeClass == .compact
        print("iPadOS multitasking mode: \(isMultitasking ? "compact" : "regular")")
    }
}

使用 .tripleColumn 样式的 UISplitViewController 同时显示三列:sidebar(导航)、primary(列表)和 detail(内容)。在切换到紧凑模式(与另一个应用 Split View)时,UIKit 自动将列折叠到导航堆栈中。开发人员不需要手动管理此行为 — UIKit 通过 traitCollection 调整布局。

与 iOS 的其他区别

在 iPadOS 中可用:通过 Files 支持外部驱动器(USB-C/Thunderbolt)、带有元素检查的 Safari 终端模式、通过 UIKeyCommand 的键盘快捷键、系统下载管理器、应用之间的 Drag & Drop 以及可调节窗口大小的 Picture in Picture。

iPad 上的多任务处理:Split View、Slide Over、Stage Manager

多任务处理 — iPadOS 的关键功能,使其与 iOS 有根本区别。用户可以在一个屏幕上同时处理多个应用。开发人员必须确保应用在任何多任务模式下都能正常工作。

Split View

Split View 将 iPad 屏幕以 50/50 或 33/67 的比例在两个应用之间分割。每个应用都有自己的 UISceneSession,具有自己的内存和生命周期。当屏幕宽度小于 600 点时,UIKit 强制将应用切换到紧凑的水平 size class。应用必须正确处理此更改。

Slide Over

Slide Over — 浮动在活动应用上方的窗口(宽度 320 点)。Slide Over 中的应用切换到紧凑的水平 size class (.compact)。优化 UI 以适应窄屏非常重要。在 Slide Over 中,可以通过从右边缘滑动或通过 Dock 调用应用。用户可以将 Slide Over 拖到 Split View 中,或向右滑动关闭。

Stage Manager

Stage Manager(iPadOS 16+,M1 及更新版本)— 一个窗口管理器,允许创建任意大小的重叠窗口。支持在 iPad 屏幕上最多 4 个窗口,在外接显示器上最多 4 个(总共 8 个)。应用会为每个新窗口收到 UISceneWillConnectNotification 事件。Stage Manager 改变了生命周期规则:后台窗口不会被冻结,而是以有限的资源继续运行。

模式窗口数窗口大小Size Class
全屏1100% 屏幕Regular
Split View 50/50250% 屏幕Regular(iPad Pro 12.9)或 Compact
Split View 33/67233% / 67%33% 为 Compact
Slide Over1 + 浮动320 ptCompact
Stage Manager1–4任意取决于大小

Apple Pencil 和手写输入

Apple Pencil — 苹果公司的主动式手写笔,支持倾斜、压力和悬停检测(iPad Pro M2+)。笔移动与墨水显示之间的延迟为 9–20 毫秒,具体取决于型号。PencilKit — 用于在应用中集成绘图的主要框架。

PencilKit:绘图集成

PKCanvasView 提供现成的绘图表面,支持墨水、铅笔、马克笔和橡皮擦。PKToolPicker — 工具选择面板。开发人员不需要实现笔触渲染 — PencilKit 使用 Metal 着色器在硬件层面完成。可以设置笔的颜色、粗细和透明度。

swift
import PencilKit
import UIKit

class DrawingViewController: UIViewController {

    private lazy var canvasView: PKCanvasView = {
        let canvas = PKCanvasView()
        canvas.tool = PKInkingTool(.pen, color: .black, width: 5)
        canvas.delegate = self
        canvas.drawingPolicy = .anyInput
        canvas.backgroundColor = .white
        return canvas
    }()

    private lazy var toolPicker: PKToolPicker = {
        let picker = PKToolPicker()
        picker.addObserver(canvasView)
        picker.setVisible(true, forFirstResponder: canvasView)
        return picker
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(canvasView)
        canvasView.frame = view.bounds
        canvasView.becomeFirstResponder()
        toolPicker.addObserver(canvasView)
    }

    // 将绘图保存到 PKDrawing(二进制格式)
    func saveDrawing() {
        let drawingData = canvasView.drawing.dataRepresentation()
        let url = FileManager.default.urls(
            for: .documentDirectory, in: .userDomainMask
        )[0].appendingPathComponent("drawing.drawing")
        try? drawingData.write(to: url)
    }
}

extension DrawingViewController: PKCanvasViewDelegate {
    func canvasViewDrawingDidChange(_ canvasView: PKCanvasView) {
        print("Canvas changed: \(canvasView.drawing.strokes.count) strokes")
    }
}

PKCanvasView 使用 drawingPolicy .anyInput 接受 Apple Pencil 和手指。PKToolPicker 允许用户选择工具,而无需编写自己的 UI。PKDrawing 以二进制格式存储,具有高压缩率 — 一小时的绘图大约占用 5–10 MB。

Scribble 和文本识别

Scribble(iPadOS 14+)允许在任何 UITextField 和 UITextView 中进行手写输入。系统使用 Neural Engine 在设备上识别手写。ML 模型适用于拉丁字母和西里尔字母。在 iOS 17+ 中,Scribble 支持自动更正和下一个词预测。开发人员不需要添加代码 — 只要有输入字段,Scribble 就会自动工作。

Apple Pencil Pro 的 Hover API

从 iPadOS 17.4 和 Apple Pencil Pro 开始,开发人员在笔接近屏幕时(最多 12 毫米)接收 悬停事件。事件包含位置、压力和方位角。应用:绘图应用中画笔触点的预览、工具预览、触摸前的视觉反馈。

iPad 界面适配

自适应界面 — iPad 应用的强制性要求。iPad 在不同的屏幕尺寸(8.3 英寸–13 英寸)和多任务模式下运行。UIKit 提供 Size Classes(horizontal: .regular/.compact, vertical: .regular/.compact)和 UISplitViewController 用于自动适配。

Size Classes 和 traitCollection

Size Classes — 确定可用空间的抽象概念。在全屏模式下,iPad 的两个轴都是 .regular。在 Split View(50%)中,水平类在 iPad mini 或 iPad Air 上可能变为 .compact。所有基于 Auto Layout 和 UICollectionViewCompositionalLayout 构建的流行布局都会自动适配。自定义适配通过重写 traitCollectionDidChange 完成。

swift
import SwiftUI

/// 使用 Size Classes 为 iPad 进行自适应布局
struct AdaptiveContentView: View {
    @Environment(\.horizontalSizeClass) private var horizontalSizeClass
    @Environment(\.verticalSizeClass) private var verticalSizeClass

    var body: some View {
        if horizontalSizeClass == .regular && verticalSizeClass == .regular {
            // 平板模式:sidebar + content
            NavigationSplitView {
                SidebarView()
            } detail: {
                ContentGridView()
            }
        } else {
            // 紧凑模式:堆栈导航
            NavigationStack {
                ContentGridView()
            }
        }
    }
}

/// 自适应网格示例:iPad 上 3 列,iPhone 上 2 列
struct ContentGridView: View {
    @Environment(\.horizontalSizeClass) private var horizontalSizeClass

    private var columns: [GridItem] {
        let count = horizontalSizeClass == .regular ? 3 : 2
        return Array(repeating: GridItem(.flexible(), spacing: 16), count: count)
    }

    var body: some View {
        ScrollView {
            LazyVGrid(columns: columns, spacing: 16) {
                ForEach(items) { item in
                    ItemCard(item: item)
                }
            }
            .padding()
        }
    }
}

在示例中,NavigationSplitView 仅在 horizontalSizeClass == .regular 时使用(iPad 全屏)。NavigationStack 在紧凑模式下应用。网格列数(3 vs 2)也根据 Size Classes 而变化。所有内容在多任务模式更改时自动更新。

UISplitViewController:三列导航

UIKit 提供三种样式的 UISplitViewController:.doubleColumn(sidebar + detail)、.tripleColumn(sidebar + primary + detail)和 .single。在 iPadOS 16+ 中,splitViewController 在 size class 更改时自动在样式之间切换。开发人员为每列设置 viewControllers,UIKit 管理可见性。

iPadOS 的框架和 API

iPadOS SDK 包含所有 iOS 框架,以及仅在 iPad 上可用的 API。以下是关键的 iPad 特定功能。

Drag & Drop

iPadOS 支持应用之间和应用内部的拖放。UIDragInteractionUIDropInteraction 允许拖放文本、图像、文件和自定义对象。Drag & Drop 与 Multi-Touch 同时工作:用户可以使用不同的手指拖放多个元素。在 SwiftUI 中使用 .onDrag 和 .onDrop 修饰符。

键盘快捷键

连接键盘(Magic Keyboard、Smart Keyboard)时,UIKeyCommand 允许添加快捷键。在 iPadOS 17+ 中,长按 Cmd 会显示键盘快捷键。苹果建议支持标准组合:⌘C(复制)、⌘V(粘贴)、⌘F(搜索)、⌘N(新建文档)。

外接显示器

iPadOS 17+ 支持具有原生分辨率高达 6K(Pro Display XDR)的外接显示器。应用可以通过 UIWindowScene 使用单独的会话 ID 在外接显示器上显示内容。Stage Manager 允许在外接显示器上放置最多 4 个可调整大小的窗口。

API用途在 iOS 中可用
UISplitViewController多列导航
PencilKitApple Pencil 绘图
UIDragInteractionDrag & Drop是(仅在应用内)
UIKeyCommand键盘快捷键是(仅限外接键盘)
UIScene多窗口模式是(仅限 iPad)
UIPencilInteractionApple Pencil 双击
PDFKitPDF 查看和注释

iPad 应用优化

iPadOS 开发需要特殊的 UI/UX、性能和测试方法。在 iPhone 上可原谅的错误在 iPad 上由于更大的屏幕和多任务处理而变得关键。

性能和内存

iPad 使用 M 系列芯片(M1、M2、M4),统一内存高达 16 GB。尽管硬件强大,但在 Split View 或 Slide Over 中的应用会与另一个应用共享资源。内存压力高于 iPhone。使用图像压缩、集合的懒加载和通过 Instruments Allocations 进行性能分析。具有 16 GB 内存的 iPad Pro M4 可以运行桌面级应用(Final Cut Pro、Logic Pro)。

Keyboard First 设计

大多数 iPad 用户使用外接键盘。界面必须完全可以通过键盘控制:Tab 用于在字段之间导航,Space 用于激活所选元素,Enter 用于确认。添加对 Full Keyboard Access 的支持 — 允许从键盘控制任何 UI 元素的系统设置。

在真实设备上测试

iPad 模拟器不能完全再现多任务行为。在真实设备上以不同模式测试:带有繁重应用的 Split View(20 个标签页的 Safari)、带有 4 个窗口的 Stage Manager、快速切换应用的 Slide Over。检查场景:用户从 Slide Over 打开应用,将其拖到 Split View,更改大小,关闭 — 应用不应崩溃。

objective-c
// 检查 iPadOS 上当前的多任务处理模式
- (void)checkMultitaskingMode:(UIWindowScene *)scene {
    if (scene.traitCollection.userInterfaceIdiom != UIUserInterfaceIdiomPad) {
        return;
    }

    BOOL isFullScreen = (scene.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular &&
                              scene.traitCollection.verticalSizeClass == UIUserInterfaceSizeClassRegular);

    BOOL isSlideOver = (CGRectGetWidth(scene.coordinateSpace.bounds) == 320.0);

    if (scene.windows.first?.windowScene?.activationConditions.canBecomeFocused == YES) {
        NSLog(@"Stage Manager 活跃");
    }

    if (isSlideOver) {
        NSLog(@"Slide Over 模式");
    } else if (isFullScreen) {
        NSLog(@"全屏模式");
    } else {
        NSLog(@"Split View 模式");
    }
}

常见问题

iPadOS 与 iOS 有何不同?

iPadOS 具有扩展的多任务处理(Split View、Slide Over、Stage Manager)、带悬停检测的 Apple Pencil 支持、带下载管理器的桌面版 Safari、原生分辨率的外接显示器以及通过 USB-C 访问外部驱动器的 Files 文件系统。

如何向应用添加 Split View 支持?

如果应用使用 UISplitViewController,则自动支持 Split View。应用必须正确处理 size class 更改:在切换到紧凑模式时,使用 UINavigationController 进行屏幕堆栈。要明确拒绝 Split View,请在 Info.plist 中设置 UIRequiresFullScreen = YES

如何将 Apple Pencil 集成到应用中?

使用 PencilKit:PKCanvasView 用于绘图表面,PKToolPicker 用于工具选择。对于自定义笔触处理 — 使用 .hover 类型的 UIEvent 和用于双击的 UIPencilInteraction。Apple Pencil Pro 延迟 — 9 毫秒,前一代 — 20 毫秒。

iPad 的屏幕尺寸是多少?

iPad mini 8.3 英寸(2266×1488)、iPad Air 10.9 英寸(2360×1640)、iPad Pro 11 英寸(2388×1668)、iPad Pro 13 英寸 M4(2752×2064)。使用 Size Classes 和 Auto Layout 进行适配。通过 Thunderbolt 支持高达 6K 的外接显示器。Stage Manager 支持最多 8 个窗口(4 个在 iPad 上 + 4 个在外接显示器上)。

iPadOS 是否支持外接显示器?

iPadOS 17+ 通过 USB-C/Thunderbolt 支持原生分辨率高达 6K 的外接显示器。应用可以通过单独的 UIWindowScene 在外接显示器上显示内容,并具有自己的生命周期。Stage Manager 在外接显示器上支持最多 4 个窗口。

总结

  • iPadOS — 苹果专为 iPad 设计的操作系统,具有多任务处理、Apple Pencil 和桌面版 Safari
  • 多任务处理包括 Split View、Slide Over(320 pt)和 Stage Manager(最多 8 个窗口)
  • Apple Pencil 通过 PencilKit 支持,延迟 9–20 毫秒,具有 hover API
  • 自适应 UI 使用 Size Classes 和 UISplitViewController 适应所有模式
  • iPadOS SDK 包括 Drag & Drop、UIKeyCommand、6K 外接显示器和 UIScene
  • Stage Manager(M1+)允许任意大小的重叠窗口
  • 测试必须在所有多任务模式下的真实设备上进行

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读