mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-15 18:59:54 +00:00
[ASViewController] stop propagating traits in the viewWill... methods (#2202)
* [ASTraitCollection] Fix 2 bugs dealing with trait propagation * Don’t propagate on `viewWillTransitionToTraitCollection`. This is too early * Pass the size from `viewWillTransitionToSize` as the container size in `traitCollectionDidChange` * using the old trait collection’s size doesn’t actually make sense. * Instead of propagating on viewWillTransitionToSize, do it in viewWillLayoutSubviews
This commit is contained in:
parent
2388f67474
commit
180fcbbc5e
@ -94,7 +94,19 @@
|
||||
- (void)viewWillLayoutSubviews
|
||||
{
|
||||
[super viewWillLayoutSubviews];
|
||||
[_node measureWithSizeRange:[self nodeConstrainedSize]];
|
||||
|
||||
// Before layout, make sure that our trait collection containerSize actually matches the size of our bounds.
|
||||
// If not, we need to update the traits and propagate them.
|
||||
if (CGSizeEqualToSize(self.node.environmentTraitCollection.containerSize, self.view.bounds.size) == NO) {
|
||||
[UIView performWithoutAnimation:^{
|
||||
ASEnvironmentTraitCollection environmentTraitCollection = [self environmentTraitCollectionForUITraitCollection:self.traitCollection];
|
||||
environmentTraitCollection.containerSize = self.view.bounds.size;
|
||||
// this method will call measure
|
||||
[self progagateNewEnvironmentTraitCollection:environmentTraitCollection];
|
||||
}];
|
||||
} else {
|
||||
[_node measureWithSizeRange:[self nodeConstrainedSize]];
|
||||
}
|
||||
|
||||
if (!AS_AT_LEAST_IOS9) {
|
||||
[self _legacyHandleViewDidLayoutSubviews];
|
||||
@ -274,17 +286,6 @@ ASVisibilityDepthImplementation;
|
||||
return asyncTraitCollection;
|
||||
}
|
||||
|
||||
- (ASEnvironmentTraitCollection)environmentTraitCollectionForWindowSize:(CGSize)windowSize
|
||||
{
|
||||
if (self.overrideDisplayTraitsWithWindowSize) {
|
||||
ASTraitCollection *traitCollection = self.overrideDisplayTraitsWithWindowSize(windowSize);
|
||||
return [traitCollection environmentTraitCollection];
|
||||
}
|
||||
ASEnvironmentTraitCollection traitCollection = self.node.environmentTraitCollection;
|
||||
traitCollection.containerSize = windowSize;
|
||||
return traitCollection;
|
||||
}
|
||||
|
||||
- (void)progagateNewEnvironmentTraitCollection:(ASEnvironmentTraitCollection)environmentTraitCollection
|
||||
{
|
||||
ASEnvironmentState environmentState = self.node.environmentState;
|
||||
@ -315,27 +316,6 @@ ASVisibilityDepthImplementation;
|
||||
[self progagateNewEnvironmentTraitCollection:environmentTraitCollection];
|
||||
}
|
||||
|
||||
- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
|
||||
{
|
||||
[super willTransitionToTraitCollection:newCollection withTransitionCoordinator:coordinator];
|
||||
|
||||
ASEnvironmentTraitCollection environmentTraitCollection = ASEnvironmentTraitCollectionFromUITraitCollection(newCollection);
|
||||
// A call to willTransitionToTraitCollection:withTransitionCoordinator: is always followed by a call to viewWillTransitionToSize:withTransitionCoordinator:.
|
||||
// However, it is not immediate and we may need the new trait collection before viewWillTransitionToSize:withTransitionCoordinator: is called. Our view already has the
|
||||
// new bounds, so go ahead and set the containerSize and propagate the traits here. As long as nothing else in the traits changes (which it shouldn't)
|
||||
// then we won't we will skip the propagation in viewWillTransitionToSize:withTransitionCoordinator:.
|
||||
environmentTraitCollection.containerSize = self.view.bounds.size;
|
||||
[self progagateNewEnvironmentTraitCollection:environmentTraitCollection];
|
||||
}
|
||||
|
||||
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
|
||||
{
|
||||
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
|
||||
|
||||
ASEnvironmentTraitCollection environmentTraitCollection = [self environmentTraitCollectionForWindowSize:size];
|
||||
[self progagateNewEnvironmentTraitCollection:environmentTraitCollection];
|
||||
}
|
||||
|
||||
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
|
||||
{
|
||||
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user