我的应用程序的主屏幕有一个 UIScrollView,其中包含一个 UIWebView 和一个 UIButton。滚动视图的内容大小在加载 Web 视图后相应设置。
用户只需按下标签栏中的图标即可随时返回主屏幕。此操作将所有视图控制器从导航控制器中清除,并将主屏幕的控制器添加到导航控制器。主屏幕重新显示正确,滚动视图工作正常。
我遇到的问题是当用户按下“返回”按钮返回主屏幕时,会弹出当前视图控制器。页面重新显示正常,但您无法再滚动。
我已经多次单步执行代码,并且无论您以哪种方式返回主屏幕,滚动视图的内容大小都被设置为相同的值。
需要注意的是,滚动视图仅在 iOS 7 下停止工作。它在 iOS 6 下按预期工作。
网页在 viewWillAppear 中加载:
-(void)viewWillAppear:(BOOL)animated
{
NSString *fullURL = @"http://somewhere.com/app-homepage/index.html";
NSURL *url = [NSURL URLWithString:fullURL];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:requestObj];
[self.scrollView setContentOffset:CGPointZero];
}
滚动视图在 webViewDidFinishLoad 中动态调整大小:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
webView.scrollView.scrollEnabled = NO;
CGRect frame = webView.frame;
frame.size.height = 1;
webView.frame = frame;
CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
self.webViewHeightConstraint.constant = frame.size.height;
self.featuredCelebritiesButtonTopVerticalSpaceConstraint.constant = frame.size.height + 8;
CGSize svContentSize = self.scrollView.contentSize;
svContentSize.height = frame.size.height + 65;
self.scrollView.contentSize = svContentSize;
webView.frame = frame;
[self.activity stopAnimating];
}