【问题标题】:Managing vertical scrolling in a UIWebView在 UIWebView 中管理垂直滚动
【发布时间】:2012-04-10 23:34:12
【问题描述】:

我尝试通过“正常”滚动操作获得可编辑的内容UIWebView,以便当文本光标将被键盘隐藏时,UIWebView 滚动以防止这种情况发生。我使用UIWebView 的 scrollView 属性从iOS developer library 阅读了“管理键盘”文档,但没有得到任何结果。我还在网络上发现了许多技巧,使用 ScrollView 属性/方法或 javascript 命令,但无法获得正常的滚动操作,例如任何 NSTextView 在 MacOS 上所做的那样。你知道解决这个问题的方法吗?

[EDITED] 得到了解决方案,并创建了一个由NSTimer 触发的方法。要获得插入符号 Y 位置,应该选择活动元素,并插入一个虚拟节点。然后获取 node.offsetTop 属性给出 caretY。不要忘记删除节点...

【问题讨论】:

  • 嗨,丹尼斯,您能否就您所做的工作提供更详细的解决方案?我还面临 UIWebView、内容可编辑和不稳定滚动行为的问题。
  • 仅供参考:您可以自己填写答案并接受:)

标签: ios uiwebview scroll rich-text-editor


【解决方案1】:

好的,这是 Apple 在他们的示例中的做法(我不再记得是什么项目名称了):

1.您注册键盘通知(键盘每次显示或隐藏时都会发送通知):

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWasShown:)
                                             name:UIKeyboardDidShowNotification object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillBeHidden:)
                                             name:UIKeyboardWillHideNotification object:nil];

2.获取键盘的大小(您对高度感兴趣)并在该点不包含在视图中时滚动:

- (void)keyboardWasShown:(NSNotification*)aNotification
{

NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    // If active text field is hidden by keyboard, scroll it so it's visible
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;

CGPoint point;

point = CGPointMake(0, activeTextField.frame.origin.y + activeTextField.frame.size.height);

if (!CGRectContainsPoint(aRect, point ))
{
    CGPoint scrollPoint = CGPointMake(0.0, activeTextField.frame.origin.y+activeTextField.frame.size.height-kbSize.height);
    [scrollView setContentOffset:scrollPoint animated:YES];
}

不要忘记在隐藏键盘时进行反转操作,如果您推送到另一个视图控制器,请移除观察者。 此示例与 UIScrollView 上的文本字段一起使用,但我相信您可以轻松适应它。

就我个人而言,如果我还管理网页端,我更喜欢创建 320 像素宽的网页,设置我的 webView sizeToFit,将其添加到 UIScrollView 顶部并从那里管理滚动。对于 textFields,我只需使用 javascript 获取所选 textField 的容器并获取它的坐标。

【讨论】:

    猜你喜欢
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 2012-04-23
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多