我正在设置UICollectionView的内容插入:
[_collectionView setContentInset:UIEdgeInsetsMake(0.f, 0.f, 100.f, 0.f)];
然后我用这种方法以编程方式一直滚动到UICollectionView的底部:
- (void)scrollToLastMessageAnimated:(BOOL)animated;
{
if (_messages.count == 0) { return; }
NSUInteger indexOfLastSection = _messagesBySections.count - 1;
NSInteger indexOfMessageInLastSection = [_messagesBySections[indexOfLastSection] count] - 1;
NSIndexPath *path = [NSIndexPath indexPathForItem:indexOfMessageInLastSection
inSection:indexOfLastSection];
[_collectionView scrollToItemAtIndexPath:path
atScrollPosition:UICollectionViewScrollPositionCenteredVertically
animated:animated];
}
它向下滚动,但它忽略了contentInset,这意味着最后一个单元格低于指定的内容插入:
左侧图像显示了视图出现后它现在的显示方式。在右图中,我手动向下滚动到最后一条消息。
我正在使用AutoLayout,为什么会发生这种情况?
修改
以下是IB设置的屏幕截图:
答案 0 :(得分:31)
今天,我偶然发现了解决方案!
选择视图控制器并取消选中“调整滚动视图插入”选项。
如果未选中此选项,iOS不会自动调整视图的插入内容(可能还有其子视图),这会导致我的问题...取消选中它并以编程方式配置滚动插件:
- (void)configureInsetsOfCollectionView
{
[_collectionView setContentInset: UIEdgeInsetsMake(self.navigationController.navigationBar.bounds.size.height + [UIApplication sharedApplication].statusBarFrame.size.height + DEFAULT_SPACING, 0.f, _keyboardHeight + _toolbar.bounds.size.height + DEFAULT_SPACING, 0.f)];
[_collectionView setScrollIndicatorInsets:UIEdgeInsetsMake(self.navigationController.navigationBar.bounds.size.height + [UIApplication sharedApplication].statusBarFrame.size.height, 0.f, _keyboardHeight + _toolbar.bounds.size.height, 0.f)];
}
答案 1 :(得分:9)
如果您正在使用流布局,请尝试设置_collectionView.collectionViewLayout.sectionInset。
答案 2 :(得分:2)
您已在工具栏下方设置了collectionView,并为两个视图的superview底部添加了约束。
将工具栏的约束设置为底部,引导并将宽度和高度设置为固定大小。对于您的collectionView,将约束设置为顶部,使用工具栏设置为底部,导致超视图和(替代)具有固定大小的宽度
<强>的CollectionView 强>
按照以下步骤使其正常工作:
检查您的收藏视图,并且不要将其放在工具栏下方,并通过选择文档大纲上的collectionView添加这些约束,单击ctrl并将其拖动到视图中,将出现一个弹出窗口,按住shift并选择这些约束
<强>工具栏强>
通过在视图中使用ctrl拖动来检查前导和底部。并为工具栏添加固定的宽度和高度。
-(void)viewWillAppear:(BOOL)animated
{
[collectionView reloadData];
[self scrollToLastMessageAnimated:YES];
}
答案 3 :(得分:2)
swift version
collectionview.contentInset = UIEdgeInsetsMake(44,0,0,0)
collectionview.scrollIndicatorInsets = UIEdgeInsetsMake(44,0,0,0)
答案 4 :(得分:1)
您可以在viewController类中设置func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize {
return CGSize(width: view.frame.width, height: 50)
}
函数:
mydata2 <- mydata[ , which(!apply(mydata==0,2,all))]
只需将高度设置为所需的值即可。