UIWebView在文本域焦点后滚动
我在屏幕上有UIView
和UIWebView
。 当我点击网站上的文本字段时,网页视图内容就会上升。 我怎么能强迫UIView
移动呢?
您可以订阅UIKeyboardWillShowNotification
或UIKeyboardDidShowNotification
,并在收到通知时移动您的UIView
。 此过程在此处描述:
适用于iOS的文本,Web和编辑编程指南 :“移动位于键盘下的内容”
也许这有帮助:我不想让UIWebView完全滚动,包括专注于文本字段。
您必须是UIWebView的委托:
_webView.scrollView.delegate = self;
然后添加此方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { scrollView.contentOffset = CGPointZero; }
UIWebView有一个回调:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
只要加载新的URL请求,就会触发此操作。 从javascript开始,您可以在标记的onfocus事件上触发新的请求URL,其自定义模式如下:
window.location = "webViewCallback://somefunction";
这是一个脚本,可以将您的自定义事件放入任何要加载的html页面中。
在将它加载到UIWebView之前,您必须获取整个HTML,如下所示:
NSString *html = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"your URL"] encoding:NSUTF8StringEncoding error:nil];
然后在适当的位置在HTML文本中插入以下内容:
然后,在回调上你应该做这样的事情:
-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType { if ( [[inRequest URL] scheme] == @"webViewCallback" ) { //Change the views position return NO; } return YES; }
而已。 希望能帮助到你。
哇,前几天我遇到了同样的问题,真的很烦人。 我发现window.yPageOffset
正在改变,但据我所知,当它改变时没有任何事件要绑定。 但也许它会以某种方式帮助你。 😉
我认为你覆盖了scrollViewDidScroll
错误。 您需要为UIWevView
实现自定义类并覆盖scrollViewDidScroll
:
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{ [super scrollViewDidScroll:scrollView]; [((id)self.delegate) scrollViewDidScroll:scrollView]; }