你可以試試這個:
聲明導航欄,與您的導航欄的高度和2個布爾變量恆定:
UINavigationBar *navBar;
static const CGFloat kNavBarHeight = 60.0f;
BOOL webViewScrollIsDragging;
BOOL webViewScrollIsDecelerating;
2.在viewDidLoad中寫如下:
[webView.scrollView setContentInset:UIEdgeInsetsMake(kNavBarHeight, 0, 0, 0)];
[webView.scrollView setScrollIndicatorInsets:UIEdgeInsetsMake(kNavBarHeight, 0, 0, 0)];
[webView.scrollView setContentOffset:CGPointMake(0, -kNavBarHeight) animated:NO];
webView.scrollView.delegate = self;
然後初始化並添加您的UINavigationBar
爲在原產地爲self.view
的子視圖(也請確保您的UIWebView
具有相同的來源,即(0,0))。
實現UIScrollViewDelegate
方法(不要忘了添加UIScrollViewDelegate
協議):
#pragma mark - UIScrollViewDelegate Methods
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView == webview.scrollView)
{
if (scrollView.contentOffset.y == 1 && !webViewScrollIsDragging && !webViewScrollIsDecelerating)
{
[UIView animateWithDuration:0.3
delay:0.0
options: UIViewAnimationCurveEaseOut
animations:^(void) {
CGRect navBarFrame = CGRectMake(0,-scrollView.contentOffset.y-kNavBarHeight, self.view.bounds.size.width, kNavBarHeight);
navBar.frame = navBarFrame;
}
completion:nil];
}
else
{
CGRect navBarFrame = CGRectMake(0,-scrollView.contentOffset.y-kNavBarHeight, self.view.bounds.size.width, kNavBarHeight);
navBar.frame = navBarFrame;
}
if (scrollView.contentOffset.y < -kNavBarHeight)
{
[webview.scrollView setScrollIndicatorInsets:UIEdgeInsetsMake(fabsf(scrollView.contentOffset.y), 0, 0, 0)];
}
}
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
if (scrollView == webview.scrollView)
{
webViewScrollIsDragging = YES;
}
}
- (void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if (scrollView == webview.scrollView)
{
webViewScrollIsDragging = NO;
}
}
- (void) scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
if (scrollView == webview.scrollView)
{
webViewScrollIsDecelerating = YES;
}
}
- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
if (scrollView == webview.scrollView)
{
webViewScrollIsDecelerating = NO;
}
}
請記住,didScroll將被調用每個(幾乎)像素更改。隱藏和顯示的條件將需要包含像offset
danh
所以你建議。對不起,我是新的。 :) – user2966615