Swift:UITableView+Extension
2020-11-11 本文已影响0人
IIronMan
JKSwiftExtension,测试用例在 UITableViewExtensionViewController.swift 里面
目录:
1、基本的扩展
2、链式编程
一、基本的扩展
// MARK:- 一、基本的扩展
public extension UITableView {
// MARK: 1.1、tableView 在 iOS 11 上的适配
/// tableView 在 iOS 11 上的适配
func tableViewNeverAdjustContentInset() {
if #available(iOS 11, *) {
self.estimatedSectionFooterHeight = 0
self.estimatedSectionHeaderHeight = 0
self.contentInsetAdjustmentBehavior = .never
}
}
// MARK: 1.2、是否滚动到顶部
/// 是否滚动到顶部
/// - Parameter animated: 是否要动画
func scrollToTop(animated: Bool) {
setContentOffset(CGPoint(x: 0, y: 0), animated: animated)
}
// MARK: 1.3、是否滚动到底部
/// 是否滚动到底部
/// - Parameter animated: 是否要动画
func scrollToBottom(animated: Bool) {
let y = contentSize.height - frame.size.height
if y < 0 { return }
setContentOffset(CGPoint(x: 0, y: y), animated: animated)
}
// MARK: 1.4、滚动到什么位置(CGPoint)
/// 是否滚动到底部
/// - Parameter animated: 是否要动画
func scrollToOffset(offsetX: CGFloat = 0, offsetY: CGFloat = 0, animated: Bool) {
setContentOffset(CGPoint(x: offsetX, y: offsetY), animated: animated)
}
}
二、链式编程
// MARK:- 二、链式编程
public extension UITableView {
// MARK: 2.1、设置 delegate 代理
/// 设置 delegate 代理
/// - Parameter delegate: delegate description
/// - Returns: 返回自身
@discardableResult
func delegate(_ delegate: UITableViewDelegate) -> Self {
self.delegate = delegate
return self
}
// MARK: 2.2、设置 dataSource 代理
/// 设置 dataSource 代理
/// - Parameter dataSource: dataSource description
/// - Returns: 返回自身
@discardableResult
func dataSource(_ dataSource: UITableViewDataSource) -> Self {
self.dataSource = dataSource
return self
}
// MARK: 2.3、设置行高
/// 设置行高
/// - Parameter height: 行高
/// - Returns: 返回自身
@discardableResult
func rowHeight(_ height: CGFloat) -> Self {
self.rowHeight = height
return self
}
// MARK: 2.4、设置段头(sectionHeaderHeight)的高度
/// 设置段头(sectionHeaderHeight)的高度
/// - Parameter height: 段头的高度
/// - Returns: 返回自身
@discardableResult
func sectionHeaderHeight(_ height: CGFloat) -> Self {
self.sectionHeaderHeight = height
return self
}
// MARK: 2.5、设置段尾(sectionHeaderHeight)的高度
/// 设置段尾(sectionHeaderHeight)的高度
/// - Parameter height: 段尾的高度
/// - Returns: 返回自身
@discardableResult
func sectionFooterHeight(_ height: CGFloat) -> Self {
self.sectionFooterHeight = height
return self
}
// MARK: 2.6、设置一个默认cell高度
/// 设置一个默认cell高度
/// - Parameter height: 默认cell高度
/// - Returns: 返回自身
@discardableResult
func estimatedRowHeight(_ height: CGFloat) -> Self {
self.estimatedRowHeight = height
return self
}
// MARK: 2.7、设置默认段头(estimatedSectionHeaderHeight)高度
/// 设置默认段头(estimatedSectionHeaderHeight)高度
/// - Parameter height: 段头高度
/// - Returns: 返回自身
@discardableResult
func estimatedSectionHeaderHeight(_ height: CGFloat) -> Self {
self.estimatedSectionHeaderHeight = height
return self
}
// MARK: 2.8、设置默认段尾(estimatedSectionFooterHeight)高度
/// 设置默认段尾(estimatedSectionFooterHeight)高度
/// - Parameter height: 段尾高度
/// - Returns: 返回自身
@discardableResult
func estimatedSectionFooterHeight(_ height: CGFloat) -> Self {
self.estimatedSectionFooterHeight = height
return self
}
// MARK: 2.9、设置分割线的样式
/// 设置分割线的样式
/// - Parameter style: 分割线的样式
/// - Returns: 返回自身
@discardableResult
func separatorStyle(_ style: UITableViewCell.SeparatorStyle = .none) -> Self {
self.separatorStyle = style
return self
}
// MARK: 2.10、设置 UITableView 的头部 tableHeaderView
/// 设置 UITableView 的头部 tableHeaderView
/// - Parameter head: 头部 View
/// - Returns: 返回自身
@discardableResult
func tableHeaderView(_ head: UIView?) -> Self {
self.tableHeaderView = head
return self
}
// MARK: 2.11、设置 UITableView 的尾部 tableFooterView
/// 设置 UITableView 的尾部 tableFooterView
/// - Parameter foot: 尾部 View
/// - Returns: 返回自身
@discardableResult
func tableFooterView(_ foot: UIView?) -> Self {
self.tableFooterView = foot
return self
}
// MARK: 2.12、滚动到第几个IndexPath
/// 滚动到第几个IndexPath
/// - Parameters:
/// - indexPath: 第几个IndexPath
/// - scrollPosition: 滚动的方式
/// - animated: 是否要动画
/// - Returns: 返回自身
@discardableResult
func scroll(to indexPath: IndexPath, at scrollPosition: UITableView.ScrollPosition = .middle, animated: Bool = true) -> Self {
if indexPath.section < 0 || indexPath.row < 0 || indexPath.section > self.numberOfSections || indexPath.row > self.numberOfRows (inSection: indexPath.section) {
return self
}
scrollToRow(at: indexPath, at: scrollPosition, animated: animated)
return self
}
// MARK: 2.13、滚动到第几个row、第几个section
/// 滚动到第几个row、第几个section
/// - Parameters:
/// - row: 第几 row
/// - section: 第几 section
/// - scrollPosition: 滚动的方式
/// - animated: 是否要动画
/// - Returns: 返回自身
@discardableResult
func scroll(row: Int, section: Int = 0, at scrollPosition: UITableView.ScrollPosition = .middle, animated: Bool = true) -> Self {
return scroll(to: IndexPath.init(row: row, section: section), at: scrollPosition, animated: animated)
}
// MARK: 2.14、滚动到最近选中的cell(选中的cell消失在屏幕中,触发事件可以滚动到选中的cell)
/// 滚动到最近选中的cell(选中的cell消失在屏幕中,触发事件可以滚动到选中的cell)
/// - Parameters:
/// - scrollPosition: 滚动的方式
/// - animated: 是否要动画
/// - Returns: 返回自身
@discardableResult
func scrollToNearestSelectedRow(scrollPosition: UITableView.ScrollPosition = .middle, animated: Bool = true) -> Self {
scrollToNearestSelectedRow(at: scrollPosition, animated: animated)
return self
}
}