我的方案是MainView - > ScrollView - > ViewScrollView
在
- (void)viewDidAppear:(BOOL)animated{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
if (appDelegate.first_time ) {
NSLog(@"First time.We need to feed sqlite.");
[self showSplash];
appDelegate.first_time = false;
}
_scrollView.contentSize = CGSizeMake(768*2, 870);
[_scrollView setScrollEnabled:YES];
... other stuff
}
aplication加载和scrollview完美运行。 完全没问题。
我遇到的独特问题是该应用首次运行。 它需要下载一些巨大的文件来提供ipad的sqlite数据库,它可能非常慢,(它必须下载大约10Mb)所以我创建了一个启动画面,显示它需要多长时间,下载了多少等等。 ..
如代码所示,我将其加载为[self showSplash];
#pragma mark splash screen
- (void)showSplash {
NSLog(@"showSplash");
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
modalSplashScreenViewController *sfvc = [storyboard instantiateViewControllerWithIdentifier:@"modalSplashScreenViewController"];
sfvc.delegate = (id)self;
[sfvc setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentViewController:sfvc animated:NO completion:nil];
}
它会显示splashScreen并开始下载
- (void)viewDidAppear:(BOOL)animated{
hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeIndeterminate;
hud.dimBackground = YES;
hud.labelText = @"Loading";
hud.detailsLabelText = @"updating data";
hud.delegate = self;
[hud showWhileExecuting:@selector(feed_it) onTarget:self withObject:nil animated:YES];
}
- (void)feed_it{
// feeds sqlite
// when has finished closes the view.
[self dismissViewControllerAnimated:YES completion:nil];
}
隐藏启动画面后,UIScrollView不会滚动。
这是我从“ViewDidAppear”结尾处获得的日志文件,该文件在splashScreen关闭后调用。 (如果我第二次运行应用程序时不会出现启动画面,则完全相同)
_viewScrollView frame width 1536.000000 frame origin.x 0.000000
_viewScrollView frame height 870.000000 frame origin.y 0.000000
_scrollview frame width 768.000000 frame origin.x 0.000000
_scrollview frame height 870.000000 frame origin.y 45.000000
_scrollView.contentSize.width 1536.000000 height:870.000000
_scrollView.contentOffset.x 0.000000 y:0.000000
_scrollView.bounds.size.width 768.000000 height 870.000000
_scrollView.intrinsicContentSize.width -1.000000
_scrollView.contentSize.width 1536.000000 height:870.000000
在不加载启动画面的情况下,它可以正常工作,加载后也不会。
任何人都知道发生了什么事?
答案 0 :(得分:1)
最后我已经解决了。这是我在XCode中见过的最奇怪的事情。
我在这个应用程序中使用storyboard segues有很多模态视图,当我返回到主视图时,scrollview工作得很好,所以我试图用segue显示启动画面而不是编码它,并且,MAGIC !它奏效了!
深入研究代码,我发现
之间的独特差异UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
modalSplashScreenViewController *sfvc = [storyboard instantiateViewControllerWithIdentifier:@"modalSplashScreenViewController"];
sfvc.delegate = (id)self;
[sfvc setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentViewController:sfvc animated:NO completion:nil];
和segue方法是:modalPresentationStyle,
在IDE上我选择了“Page Sheet”,并且在代码中我使用了UIModalPresentationFullScreen。所以将所有代码恢复到我在这里提出问题并更改
的那一刻[sfvc setModalPresentationStyle:UIModalPresentationFullScreen];
的
[sfvc setModalPresentationStyle:UIModalPresentationPageSheet];
scrollview再次完美运作。
任何人都可以解释我为什么会这样吗?也许是一个错误?