ios - 设置 contentInset 后 UICollectionView 不滚动
<p><p>我有一个水平滚动并跨越其父 View 的整个宽度的 Collection View 。我实现分页的廉价方法是将单元格宽度设置为 Collection View 宽度的 1/3,并设置与左右内容插图相同的宽度。</p>
<p>我在 IB 中禁用滚动并用左右滑动识别器替换。我的代码几乎可以在不设置 <code>contentInset</code> 的情况下工作,但设置 <code>contentInset</code> 似乎可以防止任何滚动发生</p>
<pre><code>- (void)viewDidLayoutSubviews {
;
CGFloat itemWidth = self.collectionView.bounds.size.width/3.0;
NSInteger count = ;
self.collectionView.contentSize = (CGSize){ .width=itemWidth*count, .height=self.collectionView.bounds.size.height };
// uncomment this line, and the scroll code in the swipes below fails to work
//self.collectionView.contentInset = UIEdgeInsetsMake(0, itemWidth, 0, itemWidth);
self.collectionView.contentOffset = (CGPoint){ .x=self.collectionView.contentSize.width/2.0, .y=0 };
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
CGFloat width = self.view.bounds.size.width/3.0;
return (CGSize){ .width=width, .height=collectionView.bounds.size.height };
}
</code></pre>
<p>此代码处理滑动...</p>
<pre><code>- (NSIndexPath *)centerIndexPath {
CGRect visibleRect = (CGRect){.origin = self.collectionView.contentOffset, .size = self.collectionView.bounds.size};
CGPoint visiblePoint = CGPointMake(CGRectGetMidX(visibleRect), CGRectGetMidY(visibleRect));
return ;
}
- (void)swipeLeft:(UISwipeGestureRecognizer *)gr {
NSIndexPath *centerIndexPath = ;
NSLog(@"at %@", centerIndexPath);
if (centerIndexPath.row < -1) {
;
}
}
- (void)swipeRight:(UISwipeGestureRecognizer *)gr {
NSIndexPath *centerIndexPath = ;
NSLog(@"at %@", centerIndexPath);
if (centerIndexPath.row > 0) {
;
}
}
</code></pre>
<p>除了我在上面的设置中设置 contentInsets 之外,所有这些都有效。然后,即使我到达调试器中的 scrollToItemAtIndexPath: 代码,也不会发生滚动。</p>
<p>拥有这些插图很重要,因为我希望用户了解中心项目是选定项目。</p>
<p>谁能解释为什么 contentInset 会破坏滚动以及如何解决?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>看起来 UICollectionView 有自己的内置方式来处理插入:</p>
<p> <a href="https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/CollectionViewPGforIOS/UsingtheFlowLayout/UsingtheFlowLayout.html#//apple_ref/doc/uid/TP40012334-CH3-SW1" rel="noreferrer noopener nofollow">https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/CollectionViewPGforIOS/UsingtheFlowLayout/UsingtheFlowLayout.html#//apple_ref/doc/uid/TP40012334-CH3-SW1</a> </p>
<p>使用部分插图调整内容的边距
部分插图是一种调整可用于布置单元格的空间的方法。您可以使用 insets 在节的页眉 View 之后和页脚 View 之前插入空格。您还可以使用插图在内容的两侧插入空间。图 3-5 演示了插入如何影响垂直滚动流布局中的某些内容。</p>
<p>图 3-5 部分插图更改了用于布置单元格的可用空间</p>
<p> <a href="/image/LUGoQ.png" rel="noreferrer noopener nofollow"><img src="/image/LUGoQ.png" alt="enter image description here"/></a> </p></p>
<p style="font-size: 20px;">关于ios - 设置 contentInset 后 UICollectionView 不滚动,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/45580623/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/45580623/
</a>
</p>
页:
[1]