【发布时间】:2012-06-05 01:48:11
【问题描述】:
更新
事实证明,下面的代码实际上并不是问题所在。在我的应用委托中,我正在做:
- (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 中的页面添加填充时遇到问题。我基本上是在尝试设置一个简单的滚动视图,它在不同的页面中显示 UIView,由预定义的填充分隔(有点像没有照片的照片应用程序)。我一直在尝试从 WWDC 2010 和他们的示例应用程序 PhotoScroller 遵循 Apple 的 ScrollView 示例,但总是想出在视图中显示的填充。该应用程序当前隐藏状态栏并向窗口添加 1 个视图控制器。为了简单起见,每个页面都应该显示一个绿色的 UIView,而有填充的空间是黄色的。您应该只在用户滚动时看到黄色。以下是前 3 页:
我在 .h 文件中声明了一个名为 pagingScrollView 的类级别字段。在我的单视图控制器中,我基本上只是在尝试遵循示例代码正在执行的操作。
#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 像素的页面。我错过了什么?
【问题讨论】:
-
pageFrame.origin.x = (bounds.size.width - PADDING) * index怎么样? -
@Toro 看起来我不见了:pageFrame.origin.x = (bounds.size.width * index) + PADDING;与苹果的代码相比...谢谢,但我想我发现了真正的问题...查看我的更新
-
@RyanFerretti 您是否在其他地方向此视图控制器添加视图?我所看到的是文档状态:“将视图控制器分配给此属性(以编程方式或使用界面生成器)将视图控制器的视图安装为窗口的内容视图。如果窗口具有现有的视图层次结构,则旧的在安装新视图之前删除视图。”当调用 setRootViewController 时。所以对我来说,这听起来像是按照文档运行的。
-
@heckman 这只是一个示例应用程序,用于了解事情是如何工作的......一切都以编程方式完成,这是我编写的唯一代码。应用程序委托仅创建 1 个控制器并将其添加到窗口中。滚动视图的页面大小根据控制器/视图添加到窗口的方式而变化。我只是想了解设置 rootViewController 如何影响子视图的框架尺寸。
-
@Ryan 我看到了你的更新。至于我,我会做一个自定义的pageScrollView,并覆盖它的
-layoutSubviews,以适应视图大小的变化。
标签: ios uiscrollview paging padding