xcode UICollectionView 顶部和侧面的浮动标题
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/15159559/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
UICollectionView Floating Headers on Top and Side
提问by Mason Wolters
How do you implement headers in a UICollectionView
? I know you can put in supplementary views, but I don't know how to make them "float" above a section like headers in a UITableView
do.
你如何在 a 中实现标题UICollectionView
?我知道你可以添加补充视图,但我不知道如何让它们像标题一样“浮动”在一个部分之上UITableView
。
Here's my situation: I have a collectionView
with the cells laid out in a grid format. You can scroll horizontally and vertically. I want to have a header on top so that when you scroll horizontally it scrolls horizontally with it, but it doesn't scroll vertically. I also want the same sort of thing on the left side where it scrolls vertically with the collectionView
but not horizontally. Is implementing this with supplementary views the right approach?
这是我的情况:我有一个collectionView
以网格格式布置的单元格。您可以水平和垂直滚动。我想在顶部有一个标题,这样当您水平滚动时,它会随之水平滚动,但不会垂直滚动。我也想在左侧使用相同的东西,它可以垂直滚动collectionView
但不是水平滚动。用补充意见来实现这一点是正确的方法吗?
The final functionality I am looking for is similar to that of the Numbers spreadsheet app on iOS.
我正在寻找的最终功能类似于 iOS 上的 Numbers 电子表格应用程序。
Thanks in advance for your help!
在此先感谢您的帮助!
回答by AMayes
Update for iOS9:
iOS9 更新:
let flow = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
flow.sectionHeadersPinToVisibleBounds = true
Pass it along.
传过去。
回答by Audun Kjelstrup
EDIT: As mentioned in the comments, this answer is valid, but not for multiple sections. See this blog for a better solution: http://blog.radi.ws/post/32905838158/sticky-headers-for-uicollectionview-using#notes
编辑:如评论中所述,此答案有效,但不适用于多个部分。请参阅此博客以获得更好的解决方案:http: //blog.radi.ws/post/32905838158/sticky-headers-for-uicollectionview-using#notes
You need to specify that behaviour in your layout:
您需要在布局中指定该行为:
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
NSMutableArray* attributesArray = [[super layoutAttributesForElementsInRect:rect] mutableCopy];
BOOL headerVisible = NO;
for (UICollectionViewLayoutAttributes *attributes in attributesArray) {
if ([attributes.representedElementKind isEqualToString:UICollectionElementKindSectionHeader]) {
headerVisible = YES;
attributes.frame = CGRectMake(self.collectionView.contentOffset.x, 0, self.headerReferenceSize.width, self.headerReferenceSize.height);
attributes.alpha = HEADER_ALPHA;
attributes.zIndex = 2;
}
}
if (!headerVisible) {
UICollectionViewLayoutAttributes *attributes = [self layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeader
atIndexPath:[NSIndexPath
indexPathForItem:0
inSection:0]];
[attributesArray addObject:attributes];
}
return attributesArray;
}