日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ios 获取最后一个cell_关于ios:向UICollectionView的第一个和最后一个单元格添加填充...

發(fā)布時(shí)間:2023/12/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios 获取最后一个cell_关于ios:向UICollectionView的第一个和最后一个单元格添加填充... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我子類(lèi)化UICollectionViewFlowLayout以獲取具有分頁(yè)行為的水平UICollectionView。 只要UICollectionViewCell不是最后一個(gè)單元格,它就可以很好地工作。 圖片如下。

除了以下內(nèi)容,我還需要重寫(xiě)UICollectionViewFlowLayout中的內(nèi)容嗎?

- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity

{

CGFloat offSetAdjustment = MAXFLOAT;

CGFloat horizontalCenter = (CGFloat) (proposedContentOffset.x + (self.collectionView.bounds.size.width / 2.0));

CGRect targetRect = CGRectMake(proposedContentOffset.x,

0.0,

self.collectionView.bounds.size.width,

self.collectionView.bounds.size.height);

NSArray *array = [self layoutAttributesForElementsInRect:targetRect];

for (UICollectionViewLayoutAttributes *layoutAttributes in array)

{

if(layoutAttributes.representedElementCategory == UICollectionElementCategoryCell)

{

CGFloat itemHorizontalCenter = layoutAttributes.center.x;

if (ABS(itemHorizontalCenter - horizontalCenter) < ABS(offSetAdjustment))

{

offSetAdjustment = itemHorizontalCenter - horizontalCenter;

}

}

}

CGFloat nextOffset = proposedContentOffset.x + offSetAdjustment;

do {

proposedContentOffset.x = nextOffset;

CGFloat deltaX = proposedContentOffset.x - self.collectionView.contentOffset.x;

CGFloat velX = velocity.x;

if(deltaX == 0.0 || velX == 0 || (velX > 0.0 && deltaX > 0.0) || (velX < 0.0 && deltaX < 0.0))

{

break;

}

if(velocity.x > 0.0)

{

nextOffset += [self snapStep];

}

else if(velocity.x < 0.0)

{

nextOffset -= [self snapStep];

}

} while ([self isValidOffset:nextOffset]);

proposedContentOffset.y = 0.0;

return proposedContentOffset;

}

- (BOOL)isValidOffset:(CGFloat)offset

{

return (offset >= [self minContentOffset] && offset <= [self maxContentOffset]);

}

- (CGFloat)minContentOffset

{

return -self.collectionView.contentInset.left;

}

- (CGFloat)maxContentOffset

{

return [self minContentOffset] + self.collectionView.contentSize.width - ? ? ?self.itemSize.width;

}

- (CGFloat)snapStep

{

return self.itemSize.width + self.minimumLineSpacing;

}

任何指針/注釋將很有用。

您可以使用UICollectionViewFlowLayout的UIEdgeInsets sectionInset屬性。 請(qǐng)參閱這篇文章。 另請(qǐng)參閱"使用中的Apple文檔"部分插圖

設(shè)置集合視圖的框架時(shí),可以在左右兩側(cè)設(shè)置與填充相同的空間。

要么

您可以在cellForItemAtIndexPath中放置條件,如果它是第一個(gè)單元格或最后一個(gè)單元格,則相應(yīng)地管理填充。而已。

要么

您可以設(shè)置collectionView的contentInset屬性。

例如,

UICollectionView *cv; // your collectionView

cv.contentInset = UIEdgeInsetsMake(0, 5, 0, 5);

另外,您可以在情節(jié)提要中設(shè)置UICollectionView contentInset使其起作用。

抱歉,在過(guò)去30分鐘里,我一直在與節(jié)插圖一起玩,沒(méi)想到設(shè)置UICollectionView本身的插圖。

是的,設(shè)置contentInset是適合您的情況的好解決方案。 :)

謝謝,這個(gè)答案對(duì)我有很大幫助

歡迎您@IvanCantarino! :)

contentInset是有意義的,但是如果將其放入最后一個(gè)項(xiàng)目并追加另一個(gè)項(xiàng)目,則將其放入cellForItemAtIndexPath效果不佳,因?yàn)?#xff0c;如果滾動(dòng)到末尾并添加了新項(xiàng)目,則通常會(huì)為new最終項(xiàng)目調(diào)用cellForItemAtIndexPath,但不再要求之前的最終商品。或至少不能保證被調(diào)用。

不,您不應(yīng)該在cellForItemAtIndexPath中設(shè)置contentinsett,我在回答中也沒(méi)有這樣說(shuō)!

您可以通過(guò)在Interface Builder中更改插圖來(lái)實(shí)現(xiàn)。它們可以在"大小"檢查器中作為"部分插入"找到:

對(duì)于Swift 5:

在您的viewDidLoad中,像下面這樣設(shè)置collectionView的contentInset屬性:

self.collectionView.contentInset = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5);

很簡(jiǎn)單,您可以使用collectionview方法像下面的方法一樣設(shè)置UIEdgeInsets。

-(UIEdgeInsets)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section

{

return UIEdgeInsetsMake(0,10,0,10); // top, left, bottom, right

}

您可以在此處傳遞第一個(gè)和最后一個(gè)單元格的左側(cè)空間和右側(cè)空間的值,也可以通過(guò)波紋管方法在兩個(gè)單元格之間提供最小空間

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {

return 5.0;

}

創(chuàng)建UICollectionViewFlowLayout的實(shí)例時(shí),我已經(jīng)設(shè)置了插圖。因此它無(wú)濟(jì)于事,minimumInteritemSpacing在這里沒(méi)有用,因?yàn)槲以谶M(jìn)行水平滾動(dòng)。您必須在這里使用我已經(jīng)在做的minimumLineSpacing。

接受的解決方案有效,但是如果您具有pageingEnabled,則收集視圖分頁(yè)將被破壞。

對(duì)我來(lái)說(shuō),解決方案是使用:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {

return UIEdgeInsets(top: 0, left: 16, bottom: 0, right: 16)

}

總結(jié)

以上是生活随笔為你收集整理的ios 获取最后一个cell_关于ios:向UICollectionView的第一个和最后一个单元格添加填充...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。