启动画面后奇怪的UISCrollView行为

时间:2013-05-30 17:34:26

标签: ios uiscrollview splash-screen

用一个UISCrollview发生了一些奇怪的事情。

我的方案是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

在不加载启动画面的情况下,它可以正常工作,加载后也不会。

任何人都知道发生了什么事?

1 个答案:

答案 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再次完美运作。

任何人都可以解释我为什么会这样吗?也许是一个错误?