mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-14 02:10:15 +00:00
Adjust layoutAttributes logic to account for new iOS 10 behavior (#2354)
This commit is contained in:
parent
881863fd1b
commit
aece8365dd
@ -73,10 +73,15 @@ static NSString * const kCellReuseIdentifier = @"_ASCollectionViewCell";
|
|||||||
[_node __setHighlightedFromUIKit:highlighted];
|
[_node __setHighlightedFromUIKit:highlighted];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)setLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes
|
||||||
|
{
|
||||||
|
_layoutAttributes = layoutAttributes;
|
||||||
|
_node.layoutAttributes = layoutAttributes;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)prepareForReuse
|
- (void)prepareForReuse
|
||||||
{
|
{
|
||||||
_layoutAttributes = nil;
|
self.layoutAttributes = nil;
|
||||||
_node.layoutAttributes = nil;
|
|
||||||
|
|
||||||
// Need to clear node pointer before UIKit calls setSelected:NO / setHighlighted:NO on its cells
|
// Need to clear node pointer before UIKit calls setSelected:NO / setHighlighted:NO on its cells
|
||||||
self.node = nil;
|
self.node = nil;
|
||||||
@ -92,8 +97,7 @@ static NSString * const kCellReuseIdentifier = @"_ASCollectionViewCell";
|
|||||||
*/
|
*/
|
||||||
- (void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes
|
- (void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes
|
||||||
{
|
{
|
||||||
_layoutAttributes = layoutAttributes;
|
self.layoutAttributes = layoutAttributes;
|
||||||
_node.layoutAttributes = layoutAttributes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
@ -694,6 +698,15 @@ static NSString * const kCellReuseIdentifier = @"_ASCollectionViewCell";
|
|||||||
ASCellNode *cellNode = [cell node];
|
ASCellNode *cellNode = [cell node];
|
||||||
cellNode.scrollView = collectionView;
|
cellNode.scrollView = collectionView;
|
||||||
|
|
||||||
|
// Under iOS 10+, cells may be removed/re-added to the collection view without
|
||||||
|
// receiving prepareForReuse/applyLayoutAttributes, as an optimization for e.g.
|
||||||
|
// if the user is scrolling back and forth across a small set of items.
|
||||||
|
// In this case, we have to fetch the layout attributes manually.
|
||||||
|
// This may be possible under iOS < 10 but it has not been observed yet.
|
||||||
|
if (cell.layoutAttributes == nil) {
|
||||||
|
cell.layoutAttributes = [collectionView layoutAttributesForItemAtIndexPath:indexPath];
|
||||||
|
}
|
||||||
|
|
||||||
ASDisplayNodeAssertNotNil(cellNode, @"Expected node associated with cell that will be displayed not to be nil. indexPath: %@", indexPath);
|
ASDisplayNodeAssertNotNil(cellNode, @"Expected node associated with cell that will be displayed not to be nil. indexPath: %@", indexPath);
|
||||||
|
|
||||||
if (_asyncDelegateFlags.asyncDelegateCollectionViewWillDisplayNodeForItemAtIndexPath) {
|
if (_asyncDelegateFlags.asyncDelegateCollectionViewWillDisplayNodeForItemAtIndexPath) {
|
||||||
@ -726,7 +739,7 @@ static NSString * const kCellReuseIdentifier = @"_ASCollectionViewCell";
|
|||||||
[_cellsForVisibilityUpdates removeObject:cell];
|
[_cellsForVisibilityUpdates removeObject:cell];
|
||||||
|
|
||||||
cellNode.scrollView = nil;
|
cellNode.scrollView = nil;
|
||||||
cellNode.layoutAttributes = nil;
|
cell.layoutAttributes = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user