You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

请教:苹果Books应用设置弹窗的实现方式是什么?

复刻苹果Books设置弹窗效果的方案

嘿,作为iOS开发过来人,我刚好研究过Books这个界面的实现~先给你明确结论:这个效果核心是基于系统的UIAlertController.actionSheet样式),苹果在此基础上做了一些自定义UI优化(比如圆角、内部布局细节),不过作为新手,你可以先用系统组件快速实现接近的效果,之后再按需做自定义调整。

下面分两种方案给你说明:

一、用系统UIAlertController快速实现(推荐新手先尝试)

系统的.actionSheet样式弹窗,只要配置好锚定位置,就能实现“显示在设置图标下方”的效果,而且自动适配iPhone/iPad不同设备的展示逻辑:

核心步骤&代码示例

// 假设你的设置按钮是名为settingsButton的UIButton
@IBAction func showSettingsPopup(_ sender: UIButton) {
    // 1. 创建actionSheet样式的弹窗
    let settingsAlert = UIAlertController(title: "显示设置", message: nil, preferredStyle: .actionSheet)
    
    // 2. 添加设置选项(可以根据需求自定义标题、样式)
    settingsAlert.addAction(UIAlertAction(title: "调整字号", style: .default) { _ in
        // 这里写字号调整的逻辑
    })
    settingsAlert.addAction(UIAlertAction(title: "切换主题", style: .default) { _ in
        // 这里写主题切换的逻辑
    })
    settingsAlert.addAction(UIAlertAction(title: "取消", style: .cancel))
    
    // 3. 设置弹窗锚定到设置按钮下方(关键!)
    if let popoverPresenter = settingsAlert.popoverPresentationController {
        popoverPresenter.sourceView = sender
        popoverPresenter.sourceRect = sender.bounds
        // 可以指定箭头指向,比如让箭头向上指向按钮
        popoverPresenter.permittedArrowDirections = .up
    }
    
    // 4. 弹出弹窗
    present(settingsAlert, animated: true)
}

为什么选这个方案?

  • 系统组件自带适配:自动处理不同屏幕尺寸、横竖屏切换,还支持无障碍功能(比如VoiceOver)
  • 代码量少,新手容易上手,不需要自己处理动画和遮罩逻辑

二、自定义弹窗完全复刻Books效果

如果你想要和Books完全一致的UI细节(比如更细腻的圆角、带图标的选项、自定义布局),可以自己实现一个弹窗视图:

大致实现步骤

    1. 创建一个自定义UIView,布局好你的设置选项(比如带图标按钮、开关控件等),设置好圆角、阴影等样式
    1. 添加一个半透明的背景遮罩视图,点击遮罩可以关闭弹窗
    1. 将自定义弹窗和遮罩添加到当前控制器的view上,初始状态设置为隐藏或者偏移到屏幕外
    1. UIView.animate实现弹出动画:比如让弹窗从设置按钮下方滑入,同时遮罩渐显
    1. 处理关闭逻辑:点击遮罩、选项按钮时,执行反向动画隐藏弹窗

新手提示

自定义弹窗需要处理更多细节(比如布局适配、动画流畅度、边缘情况),建议先把系统组件的方案吃透,再尝试自定义。

内容的提问来源于stack exchange,提问作者bobcat

火山引擎 最新活动