iOS26适配指南之UIScrollView

介绍

在 iOS 26 中,UIScrollView 迎来了两个重要增强,主要聚焦于滚动边缘的视觉效果和与浮动容器的交互体验。这些改进不仅让滚动过渡更自然,还提升了在复杂界面中内容的可读性。

UIScrollEdgeEffect

过去,当内容滚动到边缘时,系统会使用回弹(bounce)或发光(glow)效果来提示用户。但在 iOS 26 中,Apple 增加了类型为UIScrollEdgeEffect的属性topEdgeEffectleftEdgeEffectbottomEdgeEffectrightEdgeEffect,用于设置滚动边缘的效果。

UIScrollEdgeElementContainerInteraction

除了边缘效果,Apple 还引入新的交互UIScrollEdgeElementContainerInteraction,可以将导航栏、标签栏、工具栏或者自定义浮动视图标记为边缘元素容器,当内容滚动到该容器下方时,系统会自动添加一个渐变模糊效果,从而保证叠加内容的可读性。

案例

代码

swift 复制代码
import UIKit

class ViewController: UIViewController {
    lazy var scrollView: UIScrollView = {
        let scrollView = UIScrollView()
        scrollView.translatesAutoresizingMaskIntoConstraints = false
        scrollView.addSubview(contentView)
        scrollView.contentSize = contentView.frame.size
        // iOS26新增
        // scrollView.bottomEdgeEffect.style = .hard
        return scrollView
    }()

    lazy var contentView: UIView = {
        let view = UIView()
        view.backgroundColor = .black
        view.translatesAutoresizingMaskIntoConstraints = false
        return view
    }()

    lazy var stackView: UIStackView = {
        var config = UIButton.Configuration.clearGlass()
        config.title = "Action"
        let button1 = UIButton(type: .system)
        button1.configuration = config
        let button2 = UIButton(type: .system)
        config.title = "More"
        button2.configuration = config
        let stackView = UIStackView(arrangedSubviews: [button1, button2])
        stackView.axis = .horizontal
        stackView.spacing = 16
        stackView.translatesAutoresizingMaskIntoConstraints = false
        // iOS26新增
        let interaction = UIScrollEdgeElementContainerInteraction()
        interaction.scrollView = scrollView
        interaction.edge = .bottom
        // 关联视图
        stackView.addInteraction(interaction)
        return stackView
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(scrollView)
        view.addSubview(stackView)

        NSLayoutConstraint.activate([
            scrollView.topAnchor.constraint(equalTo: view.topAnchor),
            scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
            scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            contentView.topAnchor.constraint(equalTo: scrollView.contentLayoutGuide.topAnchor),
            contentView.leadingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.leadingAnchor),
            contentView.bottomAnchor.constraint(equalTo: scrollView.contentLayoutGuide.bottomAnchor),
            contentView.trailingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.trailingAnchor),
            contentView.widthAnchor.constraint(equalTo: scrollView.frameLayoutGuide.widthAnchor),
            contentView.heightAnchor.constraint(equalToConstant: 1000),
            stackView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            stackView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -20)
        ])
    }
}

效果

相关推荐
wahkim2 小时前
移动端开发工具集锦
flutter·ios·android studio·swift
2501_916007473 小时前
提升 iOS 26 系统流畅度的实战指南,多工具组合监控
android·macos·ios·小程序·uni-app·cocoa·iphone
hellojackjiang20115 小时前
全面适配iOS 26液态玻璃,基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v10.2发布
ios·网络编程·即时通讯·im开发·rainbowchat
非专业程序员Ping8 小时前
一文读懂字符、字形、字体
ios·swift·font
2501_915921439 小时前
iOS 应用代上架流程,多工具组合与使用 开心上架 跨平台自动化上传指南
android·ios·小程序·uni-app·自动化·cocoa·iphone
日日行不惧千万里9 小时前
2025最新仿默往 IM 即时通讯系统源码(PC + Web + iOS + Android)完整版发布!
android·ios
歪歪1009 小时前
React Native开发Android&IOS流程完整指南
android·开发语言·前端·react native·ios·前端框架
阿里超级工程师11 小时前
ios云打包证书申请不需要苹果电脑也是可以的
ios·证书·云打包
2501_9159184112 小时前
iOS 混淆与 IPA 加固一页式行动手册(多工具组合实战 源码成品运维闭环)
android·运维·ios·小程序·uni-app·iphone·webview
东坡肘子13 小时前
去 Apple Store 修手机 | 肘子的 Swift 周报 #0107
swiftui·swift·apple