UIScrollView

@_spi(FW) extension UIScrollView

滚动视图纵向手势冲突无缝滑动分类,需允许同时识别多个手势

  • 外部滚动视图是否位于顶部固定位置,在顶部时不能滚动

    Declaration

    Swift

    public var fw_drawerSuperviewFixed: Bool { get set }
  • 外部滚动视图scrollViewDidScroll调用,参数为固定的位置

    Declaration

    Swift

    public func fw_drawerSuperviewDidScroll(_ position: CGFloat)
  • 内嵌滚动视图scrollViewDidScroll调用,参数为外部滚动视图

    Declaration

    Swift

    public func fw_drawerSubviewDidScroll(_ superview: UIScrollView)

UIScrollView+ScrollViewDelegate

UIScrollView+EmptyViewDelegate

  • 空界面代理,默认nil。DZNEmptyDataSet

    Declaration

    Swift

    public weak var fw_emptyViewDelegate: EmptyViewDelegate? { get set }
  • 刷新空界面

    Declaration

    Swift

    public func fw_reloadEmptyView()
  • 当前数据总条数,默认自动调用tableView和collectionView的dataSource,支持自定义覆盖(优先级高,小于0还原)

    注意:此处为当前数据源总数,并非当前cell总数,即使tableView未reloadData也会返回新总数

    Declaration

    Swift

    public var fw_totalDataCount: Int { get set }
  • 滚动视图自定义浮层,用于显示空界面等,兼容UITableView|UICollectionView

    Declaration

    Swift

    public var fw_overlayView: UIView { get }
  • 是否显示自定义浮层

    Declaration

    Swift

    public var fw_hasOverlayView: Bool { get }
  • 显示自定义浮层,默认不执行渐变动画,自动添加到滚动视图顶部、表格视图底部

    Declaration

    Swift

    public func fw_showOverlayView(animated: Bool = false)
  • 隐藏自定义浮层,自动从滚动视图移除

    Declaration

    Swift

    public func fw_hideOverlayView()

UIScrollView+RefreshPlugin

  • 自定义刷新插件,未设置时自动从插件池加载

    Declaration

    Swift

    public var fw_refreshPlugin: RefreshPlugin! { get set }

Refreshing

  • 是否正在刷新中

    Declaration

    Swift

    public var fw_isRefreshing: Bool { get }
  • 是否显示刷新组件

    Declaration

    Swift

    public var fw_shouldRefreshing: Bool { get set }
  • 配置下拉刷新句柄

    Declaration

    Swift

    public func fw_setRefreshing(block: @escaping () -> Void, customBlock: ((Any) -> Void)? = nil)
  • 配置下拉刷新事件

    Declaration

    Swift

    public func fw_setRefreshing(target: Any, action: Selector, customBlock: ((Any) -> Void)? = nil)
  • 开始下拉刷新

    Declaration

    Swift

    public func fw_beginRefreshing()
  • 结束下拉刷新

    Declaration

    Swift

    public func fw_endRefreshing()
  • 结束下拉刷新并标记是否加载完成,需在reloadData之后调用

    Declaration

    Swift

    public func fw_endRefreshing(finished: Bool)

Loading

  • 是否正在追加中

    Declaration

    Swift

    public var fw_isLoading: Bool { get }
  • 是否显示追加组件

    Declaration

    Swift

    public var fw_shouldLoading: Bool { get set }
  • 是否已加载完成,不能继续追加,需在reloadData之后调用

    Declaration

    Swift

    public var fw_loadingFinished: Bool { get set }
  • 配置上拉追加句柄

    Declaration

    Swift

    public func fw_setLoading(block: @escaping () -> Void, customBlock: ((Any) -> Void)? = nil)
  • 配置上拉追加事件

    Declaration

    Swift

    public func fw_setLoading(target: Any, action: Selector, customBlock: ((Any) -> Void)? = nil)
  • 开始上拉追加

    Declaration

    Swift

    public func fw_beginLoading()
  • 结束上拉追加

    Declaration

    Swift

    public func fw_endLoading()
  • 结束上拉追加并标记是否加载完成,需在reloadData之后调用

    Declaration

    Swift

    public func fw_endLoading(finished: Bool)

UIScrollView+RefreshPlugin

UIScrollView+UIKit

  • 判断当前scrollView内容是否足够滚动

    Declaration

    Swift

    public var fw_canScroll: Bool { get }
  • 判断当前的scrollView内容是否足够水平滚动

    Declaration

    Swift

    public var fw_canScrollHorizontal: Bool { get }
  • 判断当前的scrollView内容是否足够纵向滚动

    Declaration

    Swift

    public var fw_canScrollVertical: Bool { get }
  • 当前scrollView滚动到指定边

    Declaration

    Swift

    public func fw_scroll(to edge: UIRectEdge, animated: Bool = true)
  • 是否已滚动到指定边

    Declaration

    Swift

    public func fw_isScroll(to edge: UIRectEdge) -> Bool
  • 获取当前的scrollView滚动到指定边时的contentOffset(包含contentInset)

    Declaration

    Swift

    public func fw_contentOffset(of edge: UIRectEdge) -> CGPoint
  • 总页数,自动识别翻页方向

    Declaration

    Swift

    public var fw_totalPage: Int { get }
  • 当前页数,不支持动画,自动识别翻页方向

    Declaration

    Swift

    public var fw_currentPage: Int { get set }
  • 设置当前页数,支持动画,自动识别翻页方向

    Declaration

    Swift

    public func fw_setCurrentPage(_ page: Int, animated: Bool = true)
  • 是否是最后一页,自动识别翻页方向

    Declaration

    Swift

    public var fw_isLastPage: Bool { get }
  • 快捷设置contentOffset.x

    Declaration

    Swift

    public var fw_contentOffsetX: CGFloat { get set }
  • 快捷设置contentOffset.y

    Declaration

    Swift

    public var fw_contentOffsetY: CGFloat { get set }
  • 滚动视图完整图片截图

    Declaration

    Swift

    public var fw_contentSnapshot: UIImage? { get }
  • 内容视图,子视图需添加到本视图,布局约束完整时可自动滚动

    当启用等比例缩放布局、且scrollView和contentView都固定高度时, 为防止浮点数误差导致scrollView拖拽时出现纵向可滚动的兼容问题,解决方案如下:

    1. 设置scrollView属性isDirectionalLockEnabled为true
    2. 设置布局高度为固定ceil高度,如:FW.fixed(ceil(FW.relative(40)))

    Declaration

    Swift

    public var fw_contentView: UIView { get }
  • 设置自动布局视图悬停到指定父视图固定位置,在scrollViewDidScroll:中调用即可

    @param view 需要悬停的视图,须占满fromSuperview @param fromSuperview 起始的父视图,须是scrollView的子视图 @param toSuperview 悬停的目标视图,须是scrollView的父级视图,一般控制器self.view @param toPosition 需要悬停的目标位置,相对于toSuperview的originY位置 @return 相对于悬浮位置的距离,可用来设置导航栏透明度等

    Declaration

    Swift

    @discardableResult
    public func fw_hoverView(_ view: UIView, fromSuperview: UIView, toSuperview: UIView, toPosition: CGFloat) -> CGFloat
  • 是否开始识别pan手势

    Declaration

    Swift

    public var fw_shouldBegin: ((UIGestureRecognizer) -> Bool)? { get set }
  • 是否允许同时识别多个手势

    Declaration

    Swift

    public var fw_shouldRecognizeSimultaneously: ((UIGestureRecognizer, UIGestureRecognizer) -> Bool)? { get set }
  • 是否另一个手势识别失败后,才能识别pan手势

    Declaration

    Swift

    public var fw_shouldRequireFailure: ((UIGestureRecognizer, UIGestureRecognizer) -> Bool)? { get set }
  • 是否pan手势识别失败后,才能识别另一个手势

    Declaration

    Swift

    public var fw_shouldBeRequiredToFail: ((UIGestureRecognizer, UIGestureRecognizer) -> Bool)? { get set }