在UIWindow上设置rootViewController会使用分页布局更改UIScrollView

时间:2012-06-05 01:48:11

标签: ios uiscrollview paging padding

更新

事实证明,下面的代码实际上并不是问题。在我的app委托中,我正在做:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.viewController = [[ViewController alloc] init];

    self.window.rootViewController = self.viewController;// <-- this does not work
    //[self.window addSubview:self.viewController.view]; // <-- this works

    [self.window makeKeyAndVisible];
    return YES;
}

如果我删除语句“self.window.rootViewController = self.viewController”并只是将viewController的视图添加到窗口,它就可以工作。有谁能解释一下?在窗口上设置rootViewController会限制子节点吗?我试图通过文档,但它没有提到太多。

原始帖子

我在向UIScrollView中的页面添加填充时遇到问题。我基本上试图设置一个简单的滚动视图,显示由预定义填充分隔的不同页面中的UIViews(有点像没有照片的照片应用程序)。我一直试图从WWDC 2010和他们的示例应用PhotoScroller开始关注Apple的ScrollView示例,但总是在视图中显示填充。该应用程序当前隐藏状态栏并向窗口添加1个视图控制器。为简单起见,每个页面应显示绿色的UIView,而填充的空间为黄色。您应该只在用户滚动时看到黄色。以下是前3页:

pages 1, 2, and 3

我有一个名为pagingScrollView的类级别字段,在.h文件中声明。在我的单视图控制器中,我基本上只是试图遵循示例代码所做的事情。

#define PADDING  10
#define PAGE_COUNT 3

- (void)loadView
{
    CGRect pagingScrollFrame = [[UIScreen mainScreen] bounds];
    pagingScrollFrame.origin.x -= PADDING;
    pagingScrollFrame.size.width += (2 * PADDING);
    pagingScrollView = [[UIScrollView alloc] initWithFrame:pagingScrollFrame];

    pagingScrollView.pagingEnabled = YES;
    pagingScrollView.backgroundColor = [UIColor yellowColor];
    pagingScrollView.contentSize = CGSizeMake(pagingScrollFrame.size.width * PAGE_COUNT, pagingScrollFrame.size.height);

    self.view = pagingScrollView;

    for(int i = 0; i < PAGE_COUNT; i++) {
        CGRect frame = [self frameForPageAtIndex:i];
        UIView *page = [[UIView alloc] initWithFrame:frame];
        page.backgroundColor = [UIColor greenColor];
        [pagingScrollView addSubview:page];
    }
}

- (CGRect)frameForPageAtIndex:(NSUInteger)index {
    CGRect bounds = pagingScrollView.bounds;
    CGRect pageFrame = bounds;

    pageFrame.size.width -= (2 * PADDING);
    pageFrame.origin.x = (bounds.size.width * index) + PADDING;

    return pageFrame;
}

pagingScrollFrame的宽度为340,所以(我认为)滚动视图会被分解为340像素的页面。我错过了什么?

2 个答案:

答案 0 :(得分:1)

非常简单地看一下,除了设置内容大小之外,您似乎做得相当正确。你设置:

pagingScrollView.contentSize = CGSizeMake(pagingScrollFrame.size.width * PAGE_COUNT, pagingScrollFrame.size.height);

如果你的每个页面彼此真正相邻,这是正确的,但是当你在每个视图之间添加一个10pt的垫时,你应该有类似的东西:

pagingScrollView.contentSize = CGSizeMake(pagingScrollFrame.size.width * PAGE_COUNT + PADDING * (PAGE_COUNT - 1), pagingScrollFrame.size.height);

这应该可以纠正您的问题并导致黄色不在可见区域。

答案 1 :(得分:0)

分页关闭的原因是因为在窗口上设置RootViewController显然是在幕后做某事(那是什么,我不知道)。要解决的问题是,我使用旧方法向窗口添加视图。

[self.window addSubview:self.viewController.view];

如果您认为在设置RootViewController时知道如何修复它,请告诉我!