- ✅ 新增 @Observable Object 支持
• UIKit 现已支持 @Observable 类型。
• 当数据变化时,视图可以自动更新,无需手动调用 setNeedsLayout() 或 setNeedsDisplay()。
• 使用前提:
• UI 更新代码需放置在 layoutSubviews() 或 viewWillLayoutSubviews() 中。
• Info.plist 中需添加字段:
<key>UIObservationTrackingEnabled</key>
<true/>
支持系统版本:iOS 18 及以上
- 🔄 新增 updateProperties() 方法
• UIViewController 和 UIView 均新增 updateProperties() 方法。
• 提供一种轻量级 UI 更新方式,不会触发完整布局(不会调用 layoutSubviews() / viewWillLayoutSubviews())。
常见使用场景:
• 更改标签文字、徽章内容
• 显示或隐藏视图
• 不涉及移动或尺寸变更的更新
使用方法:
• 主动调用 setNeedsUpdateProperties() 来触发更新
• 可自动追踪 @Observable 数据源
🖼 SF Symbols 7 动画增强
• UIImage 使用 SF Symbols 7 可实现更流畅、更实用的 UI 动画。🎞 新动画选项:flushUpdates
• UIView 动画新增 flushUpdates 选项。
• 可自动根据视图数据或约束的更改添加动画,无需调用 layoutIfNeeded()。🔐 通知使用更安全
• 不再强依赖 userInfo 携带数据,通知传参更加安全简洁。🍎 iPadOS 三栏布局支持
• UISplitViewController 支持三列布局:
let splitViewController = UISplitViewController(style: .tripleColumn)
splitViewController.setViewController(MasterViewController(), for: .primary) // 主列表
splitViewController.setViewController(DetailsViewController(), for: .supplementary) // 项目详情
splitViewController.setViewController(InspectorViewController(), for: .secondary) // 附加信息