[英]Animating contentOffset changes in a UICollectionView on deleteItemsAtIndexPaths
[英]UICollectionView contentOffset changes with custom layout
我有一个带有自定义UICollectionViewLayout的UICollectionView(实际上,我正在使用这个漂亮的布局 )。
我在viewDidLoad中设置了contentOffset = CGPointZero
。 然而,在viewDidLoad之后,偏移量为-20,并且内容被按下,如下所示:
(它应该与线齐平)。 我正在界面构建器中加载集合视图布局。 似乎我的问题与这个问题非常相似,但是那里的解决方案对我不起作用。
我尝试在我的布局实现中修改collectionViewContentSize
,以确保它总是大于collectionView的大小。 虽然这意味着我可以向下滚动我的内容(它比collectionView的高度短)并隐藏额外的空间,我也可以向上滚动查看它。
似乎什么都没有用!
我找到了发生这种情况的原因。 检查此问题的已接受答案: 状态栏和导航栏显示在iOS 7中的视图边界上
实际上,我们可以在viewDidLoad
中设置IB中的UIViewController(如果使用Storyboard)的edgesForExtendedLayout
或者automaticallyAdjustsScrollViewInsets
属性,它将解决我们的问题。
只是不要忘记检查此属性是否可用,因为在iOS6或之前它会导致崩溃:
if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) {
self.automaticallyAdjustsScrollViewInsets = NO;
}
问候!
我能提出的唯一解决方案是几乎无法接受的行为:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (self.collectionView.contentOffset.y < 0) {
self.collectionView.contentOffset = CGPointMake(self.collectionView.contentOffset.x, 0.0);
}
}
以及在collectionViewContentSize
中将内容的高度设置为fmax(self.collectionView.frame.size.height + 20, [self stackedSectionHeight])
这将删除节标题上方的空格,但它会从顶部删除“反弹”。 一个非常次优的解决方案,但相当可接受。
如果有人有,我会接受更好的答案,或者如果我找到一个,我会更新这个答案。
我开始发现这个问题出现在iOS 11上,我在滚动视图中有一个滚动视图。 花了我差不多一天才搞清楚。
尝试设置内容插入调整行为:
if #available(iOS 11.0, *) {
scrollView.contentInsetAdjustmentBehavior = .never
}
这修复了我的collectionview调整它的内容插入少量,因为collectionview框架将移动到封闭的scrollview的安全区域。
let oldContentSizeHeight: CGFloat = self.colName.contentSize.height
self.colName.reloadData()
self.colName.layoutIfNeeded()
self.view.layoutIfNeeded()
self.colName.contentOffset.y = self.colName.contentOffset.y + (self.colName.contentSize.height - oldContentSizeHeight)
这是正确答案的快速4.2版本,但为了使这个可行,你必须添加协议UIScrollViewDelegate
:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if self.collectionView.contentOffset.y < 0 {
self.collectionView.contentOffset = CGPoint(x: self.collectionView.contentOffset.x, y: 0.0)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.