Repolode
siteline

siteline/swiftui-introspect

一个 Swift 库,让 SwiftUI 视图能够访问底层的 UIKit 或 AppKit 视图并进行定制。

Star
6,574
Fork
420
未关闭 Issue
16
最近提交
上个月

这是什么?

SwiftUI 没有暴露底层 UIKit 和 AppKit 组件的许多属性。SwiftUI Introspect 通过在视图前后插入不可见的标记视图,并在两者之间的视图层级中查找对应的 UIKit 或 AppKit 实例(如 UIScrollView、NSTextField),把原生视图交给闭包处理,从而修改 SwiftUI 本身不提供的属性。

它覆盖了 List、ScrollView、Form、TextField、NavigationStack、TabView、Table,以及 sheet、popover 等多种控件。每个目标都需要指定平台版本(例如 .iOS(.v18)),因为底层视图类型可能随系统版本变化。库作者也可以使用范围式版本条件来覆盖未来系统版本。

项目声明不使用私有 API,也不做强制类型转换;找不到预期视图时,修饰符会被忽略。官方建议谨慎使用,能用原生 SwiftUI 修饰符解决的问题优先使用原生方案。

核心功能

  • 01可访问众多 SwiftUI 控件底层的 UIKit 或 AppKit 视图。
  • 02支持 iOS、tvOS、visionOS 和 macOS 平台。
  • 03每个introspect目标需要显式指定系统版本,以保证可预测性。
  • 04提供范围式版本条件,可覆盖未来的系统版本。
  • 05支持自定义可 introspect 的视图类型,用于库未覆盖的元素。

适用场景

  • 调整 SwiftUI List 或 ScrollView 的回弹行为和背景色。
  • 在原生修饰符之外定制 TextField 或 SecureField 的外观。
  • 设置 NavigationStack 或 NavigationView 的导航栏样式。
  • 在 iOS 应用中保留原生 UIKit 视图的引用,以进行高级控制。

快速上手

  1. 1

    将 SwiftUIIntrospect 包添加到 Swift Package Manager 依赖中

    .package(url: "https://github.com/siteline/swiftui-introspect", from: "27.0.0"),
  2. 2

    将 SwiftUIIntrospect 产品添加到目标的依赖中

    .product(name: "SwiftUIIntrospect", package: "swiftui-introspect"),

使用前须知

  • 由于底层 UIKit/AppKit 类型可能在主要系统版本之间变化,每个系统版本都需要显式开启支持(例如 .iOS(.v18))。
  • 仅支持 README 中列出的视图类型,许多 SwiftUI 视图(如 Text 和 Image)无法被内省。

收录于专题

标签

#swiftui#uikit#appkit#ios#macos#swift-package-manager#ui-customization#inspect#inspection#introspection

常见问题

swiftui-introspect 是什么?
一个 Swift 库,让 SwiftUI 视图能够访问底层的 UIKit 或 AppKit 视图并进行定制。 SwiftUI 没有暴露底层 UIKit 和 AppKit 组件的许多属性。SwiftUI Introspect 通过在视图前后插入不可见的标记视图,并在两者之间的视图层级中查找对应的 UIKit 或 AppKit 实例(如 UIScrollView、NSTextField),把原生视图交给闭包处理,从而修改 SwiftUI 本身不提供的属性。
swiftui-introspect 可以免费使用吗?用的什么许可证?
swiftui-introspect 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
swiftui-introspect 还在维护吗?
半年内有更新。swiftui-introspect 最近一次提交是在 2026年10月7日。
swiftui-introspect 适合用来做什么?
调整 SwiftUI List 或 ScrollView 的回弹行为和背景色。 在原生修饰符之外定制 TextField 或 SecureField 的外观。 设置 NavigationStack 或 NavigationView 的导航栏样式。 在 iOS 应用中保留原生 UIKit 视图的引用,以进行高级控制。
swiftui-introspect 怎么安装和运行?
将 SwiftUIIntrospect 包添加到 Swift Package Manager 依赖中: .package(url: "https://github.com/siteline/swiftui-introspect", from: "27.0.0"), 将 SwiftUIIntrospect 产品添加到目标的依赖中: .product(name: "SwiftUIIntrospect", package: "swiftui-introspect"),
在哪里获取 swiftui-introspect?
源代码和安装说明在 GitHub 上:https://github.com/siteline/swiftui-introspect

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目