【问题标题】:UIScrollview imbeded within UIPageviewController resizes after page turned嵌入在 UIPageviewController 中的 UIScrollview 在翻页后调整大小
【发布时间】:2014-08-03 05:03:20
【问题描述】:

所以我使用了一个包含各种新闻文章的 UIPageviewController。文章在不同长度的 UIWebview 上呈现,每个 UIWebview 都包含在一个 UIScrollview 中。加载第一篇文章后,一切正常,用户可以上下滚动页面并阅读整篇文章。但是,当用户向左或向右滑动以查看下一篇文章时,该页面上的 UIScrollview 会被调整为仅是屏幕的高度,因此只会滚动到足以反弹回来。我可以说 UIWebview 比显示的要长,因为我已经打印了它的高度,并且在滚动时,您可以看到文章还在继续。此外,当您滑回最初的文章视图时,此 UIScrollview 也会调整为仅屏幕大小。

UIWebView 将其内容加载到 ArticleViewController 的 init 方法中,然后在 webViewDidLoad 方法中调整大小,如下所示:

CGRect frame = aWebView.frame;
frame.size.height = 1;
aWebView.frame = frame;
CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
aWebView.frame = frame;

这似乎可行,尽管告诉我你是否认为我应该改变它。

要访问每篇文章,您可以从呈现每篇文章的 UITableview 中单击它。为此,在 DidSelectRowAtIndexPath 方法中,我设置了 UIPageViewController,如下所示:

UIPageViewController *articlesPageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
articlesPageViewController.dataSource = self;
articlesPageViewController.delegate = self;

非易失性!解决方案是关闭 UIScrollview 的自动布局!谢谢大家!

【问题讨论】:

  • 发布您的代码。每次您导航到 UIPageViewController 中的不同页面时,您的 UIWebView / UIScrollView 似乎都会重置。

标签: ios objective-c uiwebview uiscrollview uipageviewcontroller


【解决方案1】:
(void)webViewDidFinishLoad:(UIWebView *)aWebView { 
     CGRect frame = aWebView.frame;
     frame.size.height = 1; 
     aWebView.frame = frame; 
     CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
     frame.size = fittingSize; 
     aWebView.frame = frame; NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height); 
} 

获取webview的高度然后设置scrollview的内容大小

或者试试这个方法:

CGFloat height = [[myWebView stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue];
CGFloat width = [[myWebView stringByEvaluatingJavaScriptFromString:@"document.width"] floatValue]; 
CGRect frame = myWebView.frame; 
frame.size.height = height + 125.0; 
frame.size.width = width; 
myWebView.frame = frame; 
mainScrollView.contentSize = myWebView.bounds.size;

【讨论】:

  • self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,screenWidth, scrollViewHeight)];
  • 可能你会重置 scrollViewHeight ,滚动包含 Webview 有时会调整到 webview 的高度,为此你可以尝试记录加载的 webview 的高度和 scrollViewHeight
  • 好的,所以我发现,我正在做的是设置滚动视图的 frame.size.height。由于某种原因,这适用于第一个视图控制器。但是,无论是初始页面还是后续页面,滚动视图的 contentsize.height 始终为 0。这意味着什么?
  • - (void)webViewDidFinishLoad:(UIWebView *)aWebView { CGRect frame = aWebView.frame; frame.size.height = 1; aWebView.frame = frame; CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero]; frame.size = fittingSize; aWebView.frame = frame; NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height); } 获取webview的高度然后设置scrollview的内容大小
  • 或者试试这个方法:CGFloat height = [[myWebView stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue]; CGFloat 宽度 = [[myWebView stringByEvaluatingJavaScriptFromString:@"document.width"] floatValue]; CGRect 框架 = myWebView.frame; frame.size.height = 高度 + 125.0; frame.size.width = 宽度; myWebView.frame = 框架; mainScrollView.contentSize = myWebView.bounds.size;
猜你喜欢
  • 1970-01-01
  • 2017-03-14
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多