Ios 向下滚动时隐藏UiWebView底部的工具栏
我有以下代码,当不在web视图的顶部时,它成功地隐藏了底部工具栏,如所附图像所示。(下文) 我试图做的是完全隐藏工具栏,然后展开web视图以占用额外的空间(类似于Safari的做法)。任何帮助都会很好Ios 向下滚动时隐藏UiWebView底部的工具栏,ios,uiwebview,Ios,Uiwebview,我有以下代码,当不在web视图的顶部时,它成功地隐藏了底部工具栏,如所附图像所示。(下文) 我试图做的是完全隐藏工具栏,然后展开web视图以占用额外的空间(类似于Safari的做法)。任何帮助都会很好 - (void)viewDidLoad { [super viewDidLoad]; if (self.url != nil) { [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL U
- (void)viewDidLoad
{
[super viewDidLoad];
if (self.url != nil)
{
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[StoreWebViewController checkAndPrependProtocolForUrl:self.url]]]];
self.webView.delegate = self;
}
for (id subview in self.webView.subviews)
{
if ([[subview class] isSubclassOfClass: [UIScrollView class]])
{
UIScrollView * s = (UIScrollView*)subview;
originalDelegate = s.delegate;
s.delegate = self;
break;
}
}
}
- (void)scrollViewDidScroll :(UIScrollView *)scrollView
{
if (scrollView.contentOffset.y == 0) //Show toolbar when at top
{
[self.toolbar setHidden:NO];
}
else
{
[self.toolbar setHidden:YES];
}
[originalDelegate scrollViewDidScroll: scrollView];
}
我在一个应用程序中使用了文本区域,所以我认为用webView替换textView也是一样的 初始化方向和标志
@implementation YourViewController{
BOOL tap;
BOOL hideNav;
BOOL mustShowNav;
}
@synthesize webView;
typedef enum ScrollDirection {
ScrollDirectionNone,
ScrollDirectionRight,
ScrollDirectionLeft,
ScrollDirectionUp,
ScrollDirectionDown,
} ScrollDirection;
viewDidLoad
- (void)viewDidLoad
{
webView.delegate = self;
hideNav = NO;
mustShowNav = NO;
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(webViewTapped:)];
gestureRecognizer.delegate = self;
[self.webView addGestureRecognizer:gestureRecognizer];
}
滚动条
- (void)scrollViewDidScroll:(UIScrollView*)scrollView
{
ScrollDirection scrollDirection;
if (lastContentOffset.y < scrollView.contentOffset.y)
scrollDirection = ScrollDirectionDown;
else
scrollDirection = ScrollDirectionUp;
float endScrolling = scrollView.contentOffset.y + scrollView.frame.size.height;
if (scrollDirection == ScrollDirectionDown && scrollView.contentOffset.y > 50 && !mustShowNav) {
hideNav = YES;
tap = 0;
} else {
hideNav = NO;
}
if (scrollDirection == ScrollDirectionUp && mustShowNav){
hideNav = NO;
mustShowNav = NO;
}
if (scrollDirection == ScrollDirectionDown && endScrolling > scrollView.contentSize.height - 50 && !mustShowNav) {
mustShowNav = YES;
}
[[self navigationController] setToolbarHidden:hideNav animated:YES];
lastContentOffset = scrollView.contentOffset;
[originalDelegate scrollViewDidScroll: scrollView];
}
希望这对您有所帮助。最好的解决方案是让您的Javascript触发这些事件,宿主视图控制器应该处理它们。出于某种原因(不确定原因),我不得不将lastContentOffset=scrollView.contentOffset移到末尾,并且我不得不添加一些委托实现。也许你可以解释为什么将lastContentOffset移到末尾会产生不同。(我不明白为什么会这样,因为它只是一个变量)这似乎是因为[[self-navigationController]SetToolbar Hidden:hideNav animated:YES]。它必须改变偏移值…请确认这是它听起来奇怪的原因,但也许你是对的。我将在我的应用程序中看到它,并向您更新。我认为它完全相同,我没有注意到任何差异,尽管我做了几次测试。正如您所说的,它只是一个变量,因此当修改它时,新值将在下一次调用
scrollViewDidScroll
时使用。当然,由于setToolbarHidden
的原因,可能会有轻微的不同行为,但不会干扰用户。在我的应用程序中,工具栏从不隐藏,这会造成不同。
- (void)webViewTapped:(id)sender
{
if(!tap){
hideNav = NO;
tap = 1;
} else {
hideNav = YES;
tap = 0;
}
[[self navigationController] setToolbarHidden:hideNav animated:YES];
}