• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 为什么 UIWebView 不滚动?

[复制链接]
菜鸟教程小白 发表于 2022-12-12 21:46:18 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我查看了许多与此类似的问题,但尽我所能,我无法让 UIWebView 以任何方式滚动或交互。代码如下:

- (void)loadView {
    [super loadView];

    ...

    [self.displayView loadHTMLString:entry->infoHtml baseURL:nil];
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.displayView.userInteractionEnabled = YES;
    self.displayView.scrollView.showsVerticalScrollIndicator = YES;
    self.displayView.scrollView.scrollEnabled = YES;
    [self.displayView.scrollView flashScrollIndicators];
}

View 出现,显示所有正确的内容,并显示垂直滚动条一秒钟,正确指示当前显示的内容部分。

但我无法滚动它。触摸内容并移动我的手指根本没有任何作用。与同一父级下的非重叠 UITableView 交互工作正常;触摸那里的条目会更新 UIWebView 的内容,因为它已被编程。

UIWebView 是在 Storyboard 中使用以下选项创建的:

  • 缩放页面以适合:未选中(选中时,也不能捏合缩放)
  • 分页:未分页
  • 模式:Aspect Fit(尝试了几个;全部不可滚动)
  • UserInteractionEnabled:已选中(父 View 也已选中)

View 完全可见。我试过让它比它的父级小得多,并且显示的内容总是停在正确的位置。此 View 没有委托(delegate)或手势识别器。

包含 View 有一个UITableView 和一个UILabel,它们都不与UIWebView 的区域重叠。我已经尝试在 Storyboard 上更改场景中 View 的顺序,但这也没有任何区别。

我尝试从 UIBuilder 中删除 View 并像这样以编程方式创建它:

self.displayView = [[UIWebView alloc] initWithFrame:CGRectMake(400, 220, 400, 300)];
[self.view addSubview:self.displayView];

同样的结果。我尝试从场景中删除所有其他元素,除了这个以编程方式创建的 UIWebView。结果还是一样。

在我的代码的其他地方,我将 UIWebView 作为 UIAlertView@"accessoryView" 并在那里我可以滚动内容符合预期。

是否需要做其他事情才能滚动 UIWebView subview ?

2014-04-20: 事实上,如果我在 -loadView 方法的底部添加以下行,我会得到一个包含相同 HTML 内容的对话框作为它后面的窗口,但我 am 能够滚动对话框版本。我能想到的唯一区别是对话框是模态的(强制焦点),而我自己的带有 UITableViewUIWebView 的窗口仍然允许与它后面可见的 View 进行交互.

UIWebView* contents = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 250, 250)];
[contents loadHTMLString:entry->infoHtml baseURL:nil];
[alertView setValue:contents forKey"accessoryView"];
[alertView show];

另一方面,如果我用 [self.view addSubview:contents]; 替换 that 的最后两行,那么我在屏幕的左上角,但不会滚动。



Best Answer-推荐答案


我已经解决了。首先,我尝试将其添加到 MainController 类中的 -viewDidLoad 中:

UIWebView* contents = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 250, 250)];
[contents loadHTMLString"<html><head><title>FOO</title></head><body><p>A</p><p>B</p><p>C</p><p>D</p><p>E</p><p>F</p><p>G</p><p>H</p><p>I</p><p>J</p><p>K</p><p>L</p><p>M</p><p>N</p><p>O</p><p></p><p>Q</p><p>R</p><p>S</p><p>T</p><p>U</p><p>V</p><p>W</p><p>X</p><p>Y</p><p>Z</p></body></html>" baseURL:nil];
contents.backgroundColor = [UIColor redColor];
[self.view addSubview:contents];

它显示但不可滚动。我有一个 StartupController 来处理初始化应用程序并首先运行,所以我在那里添加了相同的代码。 这是可滚动的!啊哈!

我想到覆盖 MainView 的顶级 Google map (GMSMapView) 可能会吞下滚动事件,但会传递点击事件。在场景中,我创建了一个顶级普通/简单/空 UIView 并让 GMSMapView 成为它的全尺寸 subview ,而不仅仅是一个 map View .现在,当我将 View 添加到新的顶级(简单) View 时,它们是同级而不是 map 的子级,并且可以正确获取所有事件。

因此,我的 UIWebView 现在可以滚动了。感谢大家的意见和建议!几个月来断断续续地尝试不同的事情,终于弄明白了。

关于ios - 为什么 UIWebView 不滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23165002/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap