【问题标题】:UIWebView inside UIScrollView: scroll working but view not resizingUIScrollView 内的 UIWebView:滚动工作但视图未调整大小
【发布时间】:2014-09-19 16:07:56
【问题描述】:

我是 iOS 编程的新手,我试图在故事板中查看顶部的 UIImageView 和下方的 uiWebView。我设置了一个包含它们的UIScrollView,我希望滚动使图像在下降时消失。

我遵循这个答案 (link) 并且我得到了滚动工作,但 UIWebView 没有正确调整自身大小。我已经尝试了很多解决方案,但是如果我让 web 视图调整大小,我就不再滚动工作,反之亦然。

特别是,我正在使用:

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    _textDetailNews.delegate = self; // the web view delegate
    _textDetailNews.scrollView.scrollEnabled = NO;
    [_textDetailNews loadHTMLString:description baseURL:nil]; // set text to be shown in web view
}

- (void)webViewDidFinishLoad:(UIWebView *)webview 
{
   CGFloat height = [[_textDetailNews stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue];

   [_scrollView setContentSize: CGSizeMake(_scrollView.frame.size.width, height + _scrollView.frame.size.height)];

   CGRect oldBounds = [[self textDetailNews] frame];
   [_textDetailNews setFrame:CGRectMake(oldBounds.origin.x, oldBounds.origin.y, oldBounds.size.width, height)];
}

其中_scrollView 已经包含来自故事板的UIImageViewUIWebView 集。

感谢您对滚动和UIWebView 高度调整工作的帮助。

编辑

我试图让它更清楚。 UIScrollView 可以很好地与上述代码配合使用,但 UIWebView 不会更改其框架。虽然如果我不打电话:setContentSize _srollView UIWebView 更改大小但视图不再滚动。

谁能告诉我问题出在哪里?

【问题讨论】:

    标签: ios objective-c uiwebview uiscrollview


    【解决方案1】:

    您必须委托“UIScrollViewDelegate”协议。在 .m 文件中,您必须实现方法:

    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;
    - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
    

    例如:

    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    {
        return nil;
        return scrollView.subviews.firstObject;
    }
    
    - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
    {
    
    }
    

    【讨论】:

    • 感谢您的重播,我试过了,但它不起作用。我的视图仍在滚动购买网络视图不会辞职。因此,向下滚动结果到一个空视图。你还有其他提示吗?
    • 你确定 UIScrollView 在顶部吗?
    • 也许它背后有一些兄弟观点。您可以使用 setZoomScale 方法调整滚动视图的大小 - (void)setZoomScale:(CGFloat)scale animated:(BOOL)animated
    【解决方案2】:

    既然您说您尝试了许多排列。所以我给你一种方法不是一个实际的答案

    我已经使用过这种应用程序,并且遇到了您所说的问题,因此我使用了UITableView 而不是UIScrollView,并将UIWebView 添加为单独的UITableViewCell

    希望这会有所帮助。

    【讨论】:

    • 谢谢,这似乎是一个不错的选择。无论如何,如果问题仍然存在,我会徘徊,因为苹果文档表明双滚动对象的问题发生在 UIScrollView 或 UITableView 内的 UIWebView 中。
    • 您必须在两个选项之间进行选择,您必须滚动 UIWebView 或其容器视图。这样一次只有一个视图会滚动。
    【解决方案3】:

    如果您在 UIScrollView 中嵌入 UIWebView,那么您可能会遇到 Class Reference 中发布的警告: https://developer.apple.com/library/ios/documentation/Uikit/reference/UIWebView_Class/index.html

    重要 你不应该在 UIScrollView 对象中嵌入 UIWebView 或 UITableView 对象。如果这样做,可能会导致意外行为,因为这两个对象的触摸事件可能会混淆和错误处理。

    如果您只需要在 UIWebView 顶部包含图像,是否可以将图像嵌入到 HTML 中?

    类似于:Using HTML and Local Images Within UIWebView

    【讨论】:

      【解决方案4】:

      我被这个问题困扰了很长时间。 我还使用了您使用的相同链接,将 UIview 和 webview 放入滚动视图中,但它仍然无法正常工作。webview 的 contentsize 错误。 我通过将 webview 放在另一个 uiview 中然后放在 uiscroll 视图中来解决它,而不是直接放在滚动视图中。 希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-23
        • 1970-01-01
        • 1970-01-01
        • 2018-07-12
        • 1970-01-01
        • 1970-01-01
        • 2013-03-08
        相关资源
        最近更新 更多