我正在加载模态中的UIWebView。该网页的某些输入可以完全按照iOS 5中的预期工作。但是,在iOS 6中,只要输入获得焦点,键盘就会自动“对中”表单,即使输入有足够的空间可以显示在上面键盘。由于某些输入位于页面的顶部,因此这会迫使它们不在视图中,因此用户看不到他们正在输入的内容。向后滚动以查看输入将导致键盘停止工作,直至解散并重新对焦输入(再次将其重新移出视图)。这是iOS 6的预期行为吗?有什么方法可以保持webview在输入获得焦点时滚动(比如iOS 5的工作方式)?UIWebView仅在输入焦点iOS 6上向下滚动
回答
不知道代码的内部工作原理,我会尽力提供帮助。如果没有别的,我希望提供一些思考的食物。你问了两个问题:
它是否预计在iOS6中的行为?
你所看到的确实很奇怪。奇怪的是,webView是集中表单而不是集中输入字段。它绝对不应该导致活动的输入字段向外滚动。此外,键盘似乎停止工作,这很奇怪。但是,在iOS 5和iOS 6中,关于webView滚动,预计会看到不同的行为。如您所说,iOS 5将inputField滚动到视图中,而iOS6将它放在中间。
当输入获得焦点(如iOS 5的工作方式)时,有什么方法可以保持webview不滚动?
是的。我提供代码来做到这一点 - 即停止滚动webView。如果那正是你想要做的,那么很好。但是,停止滚动webView不同于获得与iOS5相同的行为。不过,我想按照您的要求给您这个选项。
#import "ViewController.h"
@interface ViewController() <UIScrollViewDelegate> {
CGPoint origin;
}
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.google.com"]];
[self.webView loadRequest:request];
self.webView.scrollView.delegate = self;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow)
name:UIKeyboardWillShowNotification
object:nil];
// NOTE THAT SIMPLY DISABLING THE SCROLL WILL NOT PREVENT KEYBOARD SCROLL
//[self.webView.scrollView setScrollEnabled:NO];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)keyboardWillShow {
NSLog(@"keyboard");
origin = self.webView.scrollView.contentOffset;
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
NSLog(@"scroll");
[self.webView.scrollView setContentOffset:origin];
}
@end
如果你想一致的滚动行为...
我花了一些时间编写了这个滚动修改。您可以将它用作参考,使您自己的滚动行为在iOS 5中保持一致。6.在此代码中:当用户单击网页上的文本输入框时,代码将停止默认的滚动行为页面滚动到当前位置。不幸的是,没有办法取消所有的滚动,而是你必须重写滚动。一旦默认滚动被“抑制”,它就获得活动输入框的位置并滚动到该位置。这将使活动输入框位于屏幕的顶部。你可以根据你的喜好修改它。例如,您可以使用[UIScrollView scrollRectToVisible]使其更像iOS5。
#import "ViewController.h"
@interface ViewController() <UIScrollViewDelegate> {
CGPoint origin;
CGPoint activeElementOrigin;
BOOL pauseScroll;
}
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.google.com"]];
[self.webView loadRequest:request];
self.webView.scrollView.delegate = self;
pauseScroll = NO;
origin = CGPointZero;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardDidShow)
name:UIKeyboardDidShowNotification
object:nil];
}
- (void)keyboardWillShow {
NSLog(@"keyboard");
pauseScroll = YES;
origin = self.webView.scrollView.contentOffset;
}
- (void)keyboardDidShow {
NSLog(@"keyboard DID SHOW");
pauseScroll = NO;
[self.webView.scrollView setContentOffset:activeElementOrigin animated:YES];
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
NSLog(@"scroll");
if (pauseScroll) {
[self.webView.scrollView setContentOffset:origin animated:NO];
NSString *javaScript = [NSString stringWithFormat:@"function f(){ var textField = document.activeElement; return textField.getBoundingClientRect().top; } f();"];
NSString *textFieldRectTop = [self.webView stringByEvaluatingJavaScriptFromString:javaScript];
activeElementOrigin = origin;
activeElementOrigin.y = [textFieldRectTop floatValue]-10;
}
}
@end
如果这段代码对你有帮助,那将是非常好的奖励我的赏金。 我会谦虚的欣赏。
一种解决方法可以禁用滚动在这一个UIWebView:
UIScrollView *scrollView = webView.scrollView;
[scrollview setScrollEnabled:NO];
[scrollView bounces:NO];
另一个可以设置该滚动型的UIEdgeInsets,但我不知道很多关于这一点。
我认为这是iOS 5和iOS 6中的一种标准行为,用于使输入字段位于te键盘之上(就像Safari一样)。
设置scrollEnabled只能防止用户滚动,而不是键盘系统滚动 –
好吧知道了,谢谢您的反馈 – dulgan
对这个职位的检查答案有你的答案: How to make a UITextField move up when keyboard is present?
总之,你需要拉升含有正在推出的针对输入的视图。该文章还包含如何做到这一点的示例代码。
希望这会有所帮助。
这个问题是关于webView的具体问题。 UITextField和网页中的表单输入字段之间存在主要区别。您引用的帖子不适用于webViews。 –
- 1. Phonegap键盘在焦点输入上向下滚动页面
- 2. Phonegap iOS - 防止滚动输入焦点
- 3. UIWebView向下滚动
- 4. 禁用滚动输入焦点在JavaScript
- 5. 聚焦输入时在iOS上的触摸滚动问题
- 6. Angular CLI;焦点也滚动到输入
- 7. ASP.NET焦点滚动页面输入
- 8. iOS上的Phonegap应用程序 - 页面上的文字输入焦点滚动
- 9. 仅当UIWebView向下滚动一下时,状态栏才会检测到点击
- 10. IOS8:整个页面向下滚动时输入固定页脚获取焦点
- 11. iOS:无法在UIWebView上垂直滚动
- 12. iOS - UIWebview在滚动上部分消失
- 13. UIScrollView仅滚动向下
- 14. 如何防止输入焦点上的容器滚动?
- 15. 隐藏导航向下滚动并仅在移动时向上滚动
- 16. 下拉列表应该显示6项仅剩下上滚动
- 17. 如何知道UIwebview是向下还是向上滚动? (swift)
- 18. iOS:在向文本框输入值时,嵌入式tableview不会“向上滚动”
- 19. JQuery工具提示仅在输入字段焦点上可见
- 20. 向上滚动/向下滚动jquery
- 21. 使用javascript输入焦点
- 22. 出现和变焦时向下滚动
- 23. 如何在输入焦点时在滚动视图中向上移动文本字段
- 24. jQuery - 自动输入焦点时,滚动击中某些元素
- 25. Kendo UI整个视图仅在iOS输入字段中滚动
- 26. TBODY滚动焦点在FireFox
- 27. 隐藏键盘的iOS设备上,当焦点在输入
- 28. 在输入焦点上随机隐藏的元素-safari IOS
- 29. iOS 8.3固定HTML元素在输入焦点上消失
- 30. 输入后滚动Phonegap iOS
你的UIWebView的框架是什么? – Jessedc
你能给我的链接/网址你在网络视图中打开。这样我可以更好地理解你的问题。 – Swati