Skip to content

Commit 6962e1a

Browse files
committed
fix(ios): only update state on detent change or rotation
1 parent aa09a23 commit 6962e1a

1 file changed

Lines changed: 10 additions & 1 deletion

File tree

ios/TrueSheetViewController.mm

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ @interface TrueSheetViewController ()
2525

2626
@implementation TrueSheetViewController {
2727
CGFloat _lastPosition;
28+
CGFloat _lastWidth;
2829
NSInteger _pendingDetentIndex;
2930
BOOL _pendingContentSizeChange;
3031
BOOL _pendingDetentsChange;
@@ -211,6 +212,7 @@ - (void)viewDidAppear:(BOOL)animated {
211212
dispatch_async(dispatch_get_main_queue(), ^{
212213
NSInteger index = [self currentDetentIndex];
213214
CGFloat detent = [self detentValueForIndex:index];
215+
[self.delegate viewControllerDidChangeSize:self.view.frame.size];
214216
[self.delegate viewControllerDidPresentAtIndex:index position:self.currentPosition detent:detent];
215217
[self.delegate viewControllerDidFocus];
216218

@@ -288,7 +290,12 @@ - (void)viewWillLayoutSubviews {
288290
- (void)viewDidLayoutSubviews {
289291
[super viewDidLayoutSubviews];
290292

291-
[self.delegate viewControllerDidChangeSize:self.view.frame.size];
293+
// Update state on rotation (width change)
294+
CGFloat width = self.view.frame.size.width;
295+
if (_lastWidth != width) {
296+
_lastWidth = width;
297+
[self.delegate viewControllerDidChangeSize:self.view.frame.size];
298+
}
292299

293300
if (_pendingDetentIndex >= 0) {
294301
NSInteger pendingIndex = _pendingDetentIndex;
@@ -297,6 +304,7 @@ - (void)viewDidLayoutSubviews {
297304
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
298305
[self storeResolvedPositionForIndex:pendingIndex];
299306
CGFloat detent = [self detentValueForIndex:pendingIndex];
307+
[self.delegate viewControllerDidChangeSize:self.view.frame.size];
300308
[self.delegate viewControllerDidChangeDetent:pendingIndex position:self.currentPosition detent:detent];
301309
[self emitChangePositionDelegateWithPosition:self.currentPosition realtime:NO debug:@"pending detent change"];
302310
});
@@ -735,6 +743,7 @@ - (void)sheetPresentationControllerDidChangeSelectedDetentIdentifier:
735743
NSInteger index = self.currentDetentIndex;
736744
if (index >= 0) {
737745
CGFloat detent = [self detentValueForIndex:index];
746+
[self.delegate viewControllerDidChangeSize:self.view.frame.size];
738747
[self.delegate viewControllerDidChangeDetent:index position:self.currentPosition detent:detent];
739748
}
740749
});

0 commit comments

Comments
 (0)