CollectionViewIndex 3.0.0

CollectionViewIndex 3.0.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上一个发布2018年11月
SPM支持SPM

Hilton Campbell 维护。



  • Hilton Campbell

CollectionViewIndex

Pod Version Pod License Pod Platform

视图可复制内置的UITableView部分索引,用于UICollectionView

UITableView使用名为UITableViewIndex的私有类来提供此行为。CollectionViewIndex遵循相同的命名约定。

安装

使用CocoaPods安装,将以下内容添加到您的Podfile中

use_frameworks!

pod 'CollectionViewIndex'

然后运行

pod install

使用方式

创建一个CollectionViewIndex的实例,并将其添加到您的UICollectionView实例的父视图,并在其前面

override func viewDidLoad() {
	super.viewDidLoad()
	
	view.addSubview(collectionView)
	view.addSubview(collectionViewIndex)
	
	let views: [String: AnyObject] = [
		"topLayoutGuide": topLayoutGuide,
		"bottomLayoutGuide": bottomLayoutGuide,
		"collectionView": collectionView,
		"collectionViewIndex": collectionViewIndex,
	]
	
	view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("|[collectionView]|", options: [], metrics: nil, views: views))
	view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[collectionView]|", options: [], metrics: nil, views: views))
	view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("[collectionViewIndex]|", options: [], metrics: nil, views: views))
	view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[topLayoutGuide][collectionViewIndex][bottomLayoutGuide]", options: [], metrics: nil, views: views))
}

如同UILabel一样,CollectionViewIndex需要在知道其高度后才能知道它需要多宽。当使用Auto Layout时,您可以这样设置对象的preferredMaxLayoutHeight

override func viewWillLayoutSubviews() {
	super.viewWillLayoutSubviews()
	
	collectionViewIndex.preferredMaxLayoutHeight = view.bounds.height - topLayoutGuide.length - bottomLayoutGuide.length
}

您的集合视图布局可能需要知道CollectionViewIndex对象的宽度。如果是这样,您可以在布局完成后通知它

override func viewDidLayoutSubviews() {
	super.viewDidLayoutSubviews()
	
	collectionViewLayout.indexWidth = collectionViewIndex.bounds.width
}

CollectionViewIndex在用户与之交互时发送一个UIControlEvent.ValueChanged事件。您可以通过这种方式注册目标-动作方法

collectionViewIndex.addTarget(self, action: "selectedIndexDidChange:", forControlEvents: .ValueChanged)

func selectedIndexDidChange(collectionViewIndex: CollectionViewIndex) {
	print("User selected index \(collectionViewIndex.selectedIndex)")
}

您可能希望在响应此事件的情况下跳转到集合视图的某个部分。如果您的部分标题固定在可见边界内,确保在滚动时考虑到它们。

许可协议

CollectionViewIndex 在MIT许可证下发布。有关详情请参阅LICENSE。