カスタムUICollectionViewFlowLayoutを持つcollectionViewがあります。 最後のコレクションビューセルがUITextFieldに含まれています。UICollectionView autolayout strange behavior
- (IBAction)textFieldDidChange:(UITextField*)textField {
[_collectionView.collectionViewLayout invalidateLayout];
}
セルは、テキストフィールドの幅に応じresizibleのは、これは私がときにそれを次の行に移動するにはテキストフィールドが含まれているセルをしたい
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {
NSArray* attributesForElementsInRect = [super layoutAttributesForElementsInRect:rect];
NSMutableArray* newAttributesForElementsInRect = [[NSMutableArray alloc] init];
// use a value to keep track of left margin
CGFloat leftMargin = 0.0;
for (id attributes in attributesForElementsInRect) {
UICollectionViewLayoutAttributes* refAttributes = attributes;
// assign value if next row
if (refAttributes.frame.origin.x == self.sectionInset.left) {
leftMargin = self.sectionInset.left;
} else {
// set x position of attributes to current margin
CGRect newLeftAlignedFrame = refAttributes.frame;
newLeftAlignedFrame.origin.x = leftMargin;
refAttributes.frame = newLeftAlignedFrame;
}
// calculate new value for current margin
leftMargin += refAttributes.frame.size.width + 8;
[newAttributesForElementsInRect addObject:refAttributes];
}
NSLog(@"newAttributesForElementsInRect : %@", newAttributesForElementsInRect);
return newAttributesForElementsInRect;
}
カスタムレイアウトの私のコードです十分に大きくなった。 layoutAttributesForElementsInRect:(CGRect)rectは正しいフレームを記録しますが、オフスクリーンでスワイプしてスワイプするまでセルは更新されません。 私は、セルに新しいフレームをすぐに取得させるために何かできることがあります。
UICollectionViewCell* cell = [self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:[attributesForElementsInRect indexOfObject:attributes] inSection:0]];
if (!CGRectEqualToRect(cell.frame, refAttributes.frame))
cell.frame = refAttributes.frame;
この:
おかげ
setLayoutNeededの後にlayoutifneededを使ってテストしましたか? – santhosh
はいレイアウトを無効にした後、[self.view setNeedsLayout]と[self.view layoutIfNeeded]を試しましたが、何も動作しません。 内部のテキストフィールドが大きくなると、セルの幅が広がるのが不思議です。セルが次の行に移動するときに問題が発生します。それdoes not't – zizoodiesel
私は、私は気づいたcontentViewの高さは、collectionViewの高さが成長し、そのセルは次の行にジャンプしますが、私はスクロールアップ何も起こらず、セルが消えて、次回セルが正しい位置 – zizoodiesel