mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-16 11:20:18 +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
|
- (void)viewWillLayoutSubviews
|
||||||
{
|
{
|
||||||
[super 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) {
|
if (!AS_AT_LEAST_IOS9) {
|
||||||
[self _legacyHandleViewDidLayoutSubviews];
|
[self _legacyHandleViewDidLayoutSubviews];
|
||||||
@ -274,17 +286,6 @@ ASVisibilityDepthImplementation;
|
|||||||
return asyncTraitCollection;
|
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
|
- (void)progagateNewEnvironmentTraitCollection:(ASEnvironmentTraitCollection)environmentTraitCollection
|
||||||
{
|
{
|
||||||
ASEnvironmentState environmentState = self.node.environmentState;
|
ASEnvironmentState environmentState = self.node.environmentState;
|
||||||
@ -315,27 +316,6 @@ ASVisibilityDepthImplementation;
|
|||||||
[self progagateNewEnvironmentTraitCollection:environmentTraitCollection];
|
[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
|
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
|
||||||
{
|
{
|
||||||
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
|
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user