mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
[ASEnvironmentTraitCollection] Fixed bug where containerSize wasn't being saved
Summary: The old assignment of `self.node.environmentTraitCollection.containerSize = windowSize;` doesn't because the struct creates a copy and then assigns `windowSize` to that copy. Also realized that we need to create a new `ASEnvironmentTraitCollection` in `willTransitionToTraitCollection:withTransitionCoordinator`:. If we only update in `viewWillTransitionToSize:` we will only update the `containerSize` value in `self.environmentTraitCollection` as we don't have the new trait collection yet. Differential Revision: https://phabricator.pinadmin.com/D101807
This commit is contained in:
@@ -240,8 +240,9 @@ ASVisibilityDepthImplementation;
|
|||||||
ASTraitCollection *traitCollection = self.overrideDisplayTraitsWithWindowSize(windowSize);
|
ASTraitCollection *traitCollection = self.overrideDisplayTraitsWithWindowSize(windowSize);
|
||||||
return [traitCollection environmentTraitCollection];
|
return [traitCollection environmentTraitCollection];
|
||||||
}
|
}
|
||||||
self.node.environmentTraitCollection.containerSize = windowSize;
|
ASEnvironmentTraitCollection traitCollection = self.node.environmentTraitCollection;
|
||||||
return self.node.environmentTraitCollection;
|
traitCollection.containerSize = windowSize;
|
||||||
|
return traitCollection;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)progagateNewEnvironmentTraitCollection:(ASEnvironmentTraitCollection)environmentTraitCollection
|
- (void)progagateNewEnvironmentTraitCollection:(ASEnvironmentTraitCollection)environmentTraitCollection
|
||||||
@@ -270,9 +271,18 @@ ASVisibilityDepthImplementation;
|
|||||||
[self progagateNewEnvironmentTraitCollection:environmentTraitCollection];
|
[self progagateNewEnvironmentTraitCollection:environmentTraitCollection];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: We don't override willTransitionToTraitCollection:withTransitionCoordinator: because viewWillTransitionToSize:withTransitionCoordinator: will also called
|
- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
|
||||||
// called in all these cases. However, there are cases where viewWillTransitionToSize:withTransitionCoordinator: but willTransitionToTraitCollection:withTransitionCoordinator:
|
{
|
||||||
// is not.
|
[super willTransitionToTraitCollection:newCollection withTransitionCoordinator:coordinator];
|
||||||
|
|
||||||
|
// here we take the new UITraitCollection and use it to create a new ASEnvironmentTraitCollection on self.node
|
||||||
|
// We will propagate when the corresponding viewWillTransitionToSize:withTransitionCoordinator: is called and we have the
|
||||||
|
// new windowSize. There are cases when viewWillTransitionToSize: is called when willTransitionToTraitCollection: is not.
|
||||||
|
// Since we do the propagation on viewWillTransitionToSize: our subnodes should always get the proper trait collection.
|
||||||
|
ASEnvironmentTraitCollection asyncTraitCollection = ASEnvironmentTraitCollectionFromUITraitCollection(newCollection);
|
||||||
|
self.node.environmentTraitCollection = asyncTraitCollection;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
|
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
|
||||||
{
|
{
|
||||||
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
|
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
|
||||||
|
|||||||
Reference in New Issue
Block a user