ResizableController 是用 swift 编写的自定义模型呈现样式。
深色模式 | 浅色模式 |
---|---|
![]() |
![]() |
![]() |
![]() |
此版本与 Swift 5 兼容。
ResizableController 可通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile
pod 'ResizableController', '~> 1.0'
ResizableController 可通过 Swift Package Manager 获取。要安装它,请从 Url 添加软件包依赖项
https://github.com/paytmmoney/ResizableController
要呈现的视图控制器,使用可调整大小的过渡,需要符合 ResizableControllerPositionHandler
协议。此协议在实现级别继承自 UIViewController。
public protocol ResizableControllerPositionHandler: UIViewController {
var shouldShowSlideUpIndication: Bool { get }
var sliderBackgroundColor: UIColor { get }
var initialTopOffset: CGFloat { get }
var finalTopOffset: CGFloat { get }
func willMoveTopOffset(value: CGFloat)
func didMoveTopOffset(value: CGFloat)
}
以上所有属性都是可选的,可以添加以实现不同的结果。
如果您不想包含直观的向上滑动指示器,请覆盖此属性。默认情况下,对于不可调整大小的视图控制器禁用。
覆盖此属性以给向上滑动指示器不同的颜色。默认为 alpha 0.5 的 darkGrey
覆盖此属性以给出从顶部计算的初始自定义高度。
建议:将此偏移量视为我们应用于视图的 topAnchor 约束。
覆盖此属性以给出从顶部计算的自定义最终高度。Resizable controller 将其高度从 initialTopOffset 更改为 finalTopOffset。
覆盖此属性以在视图控制器更改大小之前向其添加行为。如果您覆盖此属性,请确保手动关闭视图控制器,因为默认行为将被覆盖。
类似于 willMoveTopOffset,但将在动画完成且视图控制器调整大小后触发。
用于创建可调整大小的控制器。符合 ResizableControllerPositionHandler
并覆盖 initialTopOffset
。
import ResizableController
class ResizablePresentedViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension ResizablePresentedViewController: ResizableControllerPositionHandler {
// This height 500 is from topAnchor
var initialTopOffset: CGFloat {
500
}
}
用于创建固定高度控制器。符合 ResizableControllerPositionHandler
并覆盖 initialTopOffset
和 finalTopOffset
。
import ResizableController
class FixedHeightPresentedViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension FixedHeightPresentedViewController: ResizableControllerPositionHandler {
// This height 500 is from topAnchor
var initialTopOffset: CGFloat {
500
}
// Both initial and final height should be same to make it a fixed height controller
var finalTopOffset: CGFloat {
500
}
}
或
不要覆盖任何属性,这将为您提供 iOS 13 的自动呈现,该呈现可用于较低的 iOS 版本。
import ResizableController
class FixedHeightPresentedViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension ResizablePresentedViewController: ResizableControllerPositionHandler {}
要呈现,请调用以下重载方法
func present(_ viewControllerToPresent: ResizableControllerPositionHandler,
animationDuration: TimeInterval = 0.3,
completion: (() -> Void)? = nil)
示例
let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(identifier: "ResizablePresentedViewController") as ResizablePresentedViewController
self.present(viewController)
Arjun Baru,Paytmoney Ltd 的 iOS 工程师,paytmmoney.com
您可以通过 arjun.baru@paytmmoney.com 与我联系
合作者
ResizableController 在 MIT 许可证下可用。有关更多信息,请参见 LICENSE 文件。
这是一个实现 ResizableController 的示例项目 示例项目
欢迎创建 pull request,打开 issue 或在 Twitter 上找到我们。