private void UpdateContentInset() { var navBarBottomY = _navBarController.View.Frame.Y / _navBarController.View.Frame.Height; nfloat top; if (!_extensionController.IsContracted()) { top = _extensionController.View.Frame.Y + _extensionController.View.Bounds.Size.Height; } else { top = navBarBottomY; } UpdateScrollContentInsetTop(top); }
private void HandleScrollingEnded(nfloat velocity) { var minVelocity = 500; if (!IsViewControllerVisible() || (_navBarController.IsContracted() && velocity < minVelocity)) { return; } _resistanceConsumed = 0; if (_currentState == HidingNavigationBarState.Contracting || _currentState == HidingNavigationBarState.Expanding || velocity > minVelocity) { var contracting = _currentState == HidingNavigationBarState.Contracting; if (velocity > minVelocity) { contracting = false; } var deltaY = _navBarController.Snap(contracting); var tabBarShouldContract = deltaY < 0; _tabBarController?.Snap(tabBarShouldContract); var newContentOffset = _scrollView.ContentOffset; newContentOffset.Y -= deltaY; var contentInset = _scrollView.ContentInset; var top = contentInset.Top + deltaY; UIView.Animate(0.2, () => { UpdateScrollContentInsetTop(top); _scrollView.ContentOffset = newContentOffset; }); _previousYOffset = nfloat.NaN; } }