菜鸟教程小白 发表于 2022-12-12 21:46:18

ios - 为什么 UIWebView 不滚动?


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

<pre><code>- (void)loadView {
    ;

    ...

    ;
}

- (void)viewDidLoad
{
    ;

    self.displayView.userInteractionEnabled = YES;
    self.displayView.scrollView.showsVerticalScrollIndicator = YES;
    self.displayView.scrollView.scrollEnabled = YES;
    ;
}
</code></pre>

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

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

<p>UIWebView 是在 Storyboard 中使用以下选项创建的:</p>

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

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

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

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

<pre><code>self.displayView = [ initWithFrame:CGRectMake(400, 220, 400, 300)];
;
</code></pre>

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

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

<p><em>是否需要做其他事情才能滚动 UIWebViewsubview ?</em></p>

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

<pre><code>UIWebView* contents = [ initWithFrame:CGRectMake(0, 0, 250, 250)];
;
;
;
</code></pre>

<p>另一方面,如果我用 <code>;</code> 替换 <em>that</em> 的最后两行,那么我在屏幕的左上角,但不会<strong>不</strong>滚动。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我已经解决了。首先,我尝试将其添加到 MainController 类中的 <code>-viewDidLoad</code> 中:</p>

<pre><code>UIWebView* contents = [ initWithFrame:CGRectMake(0, 0, 250, 250)];
;
contents.backgroundColor = ;
;
</code></pre>

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

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

<p>因此,我的 <code>UIWebView</code> 现在可以滚动了。感谢大家的意见和建议!几个月来断断续续地尝试不同的事情,终于弄明白了。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 为什么 UIWebView 不滚动?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/23165002/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/23165002/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 为什么 UIWebView 不滚动?