ResizableController 1.0.0

ResizableController 1.0.0

[Arjun] 维护。



  • Arjun Baru

概述

ResizableController 是用 Swift 编写的自定义模型展示风格。

暗黑模式 亮色模式
BasicFlow DismissFlow_light
OnTopOfModelPresentation OnModelPresentation

特性

  • 带有 自定义初始/最终高度 的可调整大小的视图控制器。
  • 支持所有屏幕和设备,支持 iOS 11.0+
  • 提供与较旧版本的 iOS 13 自动展示方式的向下兼容性。
  • 100% 兼容其他展示方式。
  • 简单集成,只需几行代码。
  • 流畅的过渡动画。
  • 视控制器大小改变时,提供专门的回调。
  • 可以通过向下滑和背景点击来关闭控制器。
  • 兼容暗黑和亮色模式。

安装

此版本与 Swift 5 兼容。

CocoaPods

ResizableController 通过 CocoaPods 提供。要安装它,只需在 Podfile 中添加以下行

source '[email protected]:paytmmoney/ResizableController.git'

pod 'ResizableController'

Swift 包管理器

ResizableController 通过 Swift 包管理器 提供。要安装它,请从 URL 添加包依赖项。

https://github.com/paytmmoney/ResizableController

使用方法

ResizableControllerPositionHandler

需要使用可调整大小的转换进行显示的视图控制器需要符合 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)
}

上述所有属性都是可选的,可以添加以实现不同的结果。

shouldShowSlideUpIndication

如果不想包含直观的滑动指示器,请重写此属性。默认情况下,非可调整大小的视图控制器将禁用。

sliderBackgroundColor

重写此属性,可以为滑动指示器提供不同的颜色。默认为带有 alpha 0.5 的深灰色。

initialTopOffset

覆盖此属性以给出初始自定义高度,从顶部计算。

建议:将此偏移量视为我们应用于视图的topAnchor约束。

finalTopOffset

覆盖此属性以给出自定义最终高度,从顶部计算。可调整大小的控制器将将其高度从initialTopOffset更改为finalTopOffset。

willMoveTopOffset

覆盖此属性,在视图控制器更改大小之前添加行为。如果您覆盖此属性,务必手动取消视图控制器,因为默认行为将受影响。

didMoveTopOffset

类似于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 并重写 initialTopOffsetfinalTopOffset.

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
您可以通过 [email protected] 联系我

许可证

ResizableController 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。

示例项目

以下是实现 ResizableController 的示例项目 示例项目

建议或反馈?

请随意创建拉取请求、开启问题或在我们 Twitter 上找到我们。