如何在 Swift、XCode 中为 Collection 视图设置自定义水平滚动?
How can I set custom horizontal scroll for Collection View in Swift, XCode?
我想为我的 CollectionView 设置自定义水平滚动,它将滚动 1 个单元格(而不是屏幕的整个宽度)。
我可以设置水平滚动,但不能自定义。 (见屏幕)。
1 屏幕:我对 UIScrollViewDelegate 的 collectionView 的扩展。
*我看到,在控制台中(也可以看到)"x" - 我的偏移量 = 290 - 这是真的!但实际上它不是290。分页标记在"true" 2 screen: delegate and dataSource.
请帮忙!
首先您需要将 collectionView 滚动方向设置为水平 (UICollectionViewScrollDirectionHorizontal
) 并将 pagingEnabled
设置为 YES
这意味着您的 collection 视图将逐个单元格水平滚动。
设置水平方向(Select collection 从 XIB 或 Storyboard 查看)
并为设置分页启用
myCollectionView.pagingEnabled = true
更新:
你应该使用 UICollectionViewDelegateFlowLayout
委托
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
{
let width = UIScreen.main.bounds.size.width
var height = 101.7 // set height as you want
return CGSize(width: width, height: height)
}
您可以创建一个自定义 UICollectionViewFlowLayout,它将单元格置于屏幕中央,然后一次一页。 Karmadust 写了一个很好的博客 post 我过去曾成功地用它来做同样的事情
http://blog.karmadust.com/centered-paging-with-preview-cells-on-uicollectionview/
如果使用故事板,请转到 collection 视图并 select 右手选项卡 "show the size inspector" 并更改
minimum spacing for cells = 0
minimum spacing for lines = 0
如果您想直接从代码进行更改,请实施这些 UICollectionViewDelegateFlowLayout 方法
func collectionView(_ collectionView: UICollectionView, layout
collectionViewLayout: UICollectionViewLayout,
minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
必须记住滚动方向设置为水平
并启用分页
并将此委托方法实现到代码中
extension ViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout
collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath:
IndexPath) -> CGSize {
return CGSize(width: collectionView.frame.size.width, height:
collectionView.frame.size.height)
}
}
我想为我的 CollectionView 设置自定义水平滚动,它将滚动 1 个单元格(而不是屏幕的整个宽度)。
我可以设置水平滚动,但不能自定义。 (见屏幕)。 1 屏幕:我对 UIScrollViewDelegate 的 collectionView 的扩展。 *我看到,在控制台中(也可以看到)"x" - 我的偏移量 = 290 - 这是真的!但实际上它不是290。分页标记在"true" 2 screen: delegate and dataSource.
请帮忙!
首先您需要将 collectionView 滚动方向设置为水平 (UICollectionViewScrollDirectionHorizontal
) 并将 pagingEnabled
设置为 YES
这意味着您的 collection 视图将逐个单元格水平滚动。
设置水平方向(Select collection 从 XIB 或 Storyboard 查看)
并为设置分页启用
myCollectionView.pagingEnabled = true
更新:
你应该使用 UICollectionViewDelegateFlowLayout
委托
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
{
let width = UIScreen.main.bounds.size.width
var height = 101.7 // set height as you want
return CGSize(width: width, height: height)
}
您可以创建一个自定义 UICollectionViewFlowLayout,它将单元格置于屏幕中央,然后一次一页。 Karmadust 写了一个很好的博客 post 我过去曾成功地用它来做同样的事情
http://blog.karmadust.com/centered-paging-with-preview-cells-on-uicollectionview/
如果使用故事板,请转到 collection 视图并 select 右手选项卡 "show the size inspector" 并更改
minimum spacing for cells = 0
minimum spacing for lines = 0
如果您想直接从代码进行更改,请实施这些 UICollectionViewDelegateFlowLayout 方法
func collectionView(_ collectionView: UICollectionView, layout
collectionViewLayout: UICollectionViewLayout,
minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
必须记住滚动方向设置为水平 并启用分页
并将此委托方法实现到代码中
extension ViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout
collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath:
IndexPath) -> CGSize {
return CGSize(width: collectionView.frame.size.width, height:
collectionView.frame.size.height)
}
}