一个 SwiftUI 包,可以轻松访问视图的大小和内边距信息。
让你的代码摆脱丑陋的 GeometryReader。
import SwiftUI
import EasyGeometryProxy
struct ContentView: View {
var body: some View {
NavigationView {
// ...
}
.withViewSize(onAppear: someFunction)
}
}
EasyGeometryProxy
是 SwiftUI 的 View
类型的 Swift 扩展。它提供了一个更简洁的替代方案,替代了在视图背景上使用传统 GeometryReader
的方式,提供了一种优雅而直接的方法来访问视图的大小和安全区域内边距。
访问大小:
withViewSize(onAppear:onChange:)
访问安全区域内边距:
withViewInsets(onAppear:onChange:)
同时访问大小和内边距:
withViewGeometryProxy(onAppear:onChangeSize:onChangeInsets:)
所有函数都经过重载,以支持各种参数组合,允许你在需要时访问所需的数据。所有 onChange
变体都可以按如下方式调整
EasyGeometryProxy 利用了 iOS 17 的新 onChange(of:initial:_:)
函数。
使用视图的大小从未如此简洁。
1. 在显示时访问安全区域内边距
之前:
.background {
GeometryReader { proxy in
Color.clear
.onAppear {
setBottomSafeArea(proxy.safeAreaInsets)
}
}
}
之后:
.withViewInsets(onAppear: setBottomSafeArea)
2. 在显示和更改时访问大小和内边距
之前:
.background {
GeometryReader { proxy in
Color.clear
.onAppear {
someFunction(proxy)
}
.onChange(of: proxy.size, perform: someFunction)
.onChange(of: proxy.safeAreaInsets, perform: someFunction)
}
}
之后:
.withViewGeometryProxy(
onAppear: someFunction,
onChangeSize: someFunction,
onChangeInsets: someFunction
)
3. 演示使用 0 个或 2 个参数的重载
显式
.withViewGeometryProxy { proxy in
someFunction(proxy)
} onChangeSize: {
/* 0 parameters */
someFunction()
} onChangeInsets: { oldInsets, newInsets in
/* 2 parameters */
someFunction(oldInsets, newInsets)
}
隐式
.withViewGeometryProxy(
onAppear: someFunction,
onChangeSize: someFunction, // 0 parameters
onChangeInsets: someFunction // 2 parameters
)
要在 Xcode 中使用 EasyGeometryProxy
,请导航至:File ➡ Add Package Dependencies
在右上角的搜索栏中,输入:https://github.com/DevonMartin/EasyGeometryProxy
确保您的项目已在下拉菜单 Add to Project
中选中,然后单击 Add Package
。
就这样!然后,在任何要访问该包的文件中,只需 import EasyGeometryProxy
。
版权所有 © 2023 Devon Martin
特此授予任何人为获得本软件及相关文档文件(“软件”)的副本的任何人员免费许可,以处理本软件而无限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售本软件的副本的权利,并允许向其提供本软件的人员,但须符合以下条件
以上版权声明和本许可声明应包含在本软件的所有副本或重要部分中。
本软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于适销性、适用于特定目的和不侵权的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权行为或其他方面,由本软件或本软件的使用或其他交易引起的、与之相关的或与之相关的。