UIScrollView不会在UIView中显示

时间:2011-03-31 10:47:22

标签: uiview uiscrollview viewdidload addsubview loadview

我的应用程序在UINavigationController上面的UITabBarController上以编程方式构建,它们都在我的AppDelegate中声明。在我的navigationcontroller中,我正在显示一个UIViewController,一个自定义类。此自定义类应在UIScrollView和UIPageControl中显示自定义UIView。

继承我的问题:
self.view 似乎在我调用 self.view = [[UIView alloc] init] (或类)。我想知道这是否是 - (void)loadView 的问题,但似乎它在 - (void)viewDidLoad 中产生相同的错误。所以我基本上不得不使用 self.view = scrollView 来显示我的scrollView,考虑到 [self.view addSubview:scrollView] 产生错误。我的UIPageControl应该一直保留在页面上,实际上是视图的另一部分,而不是UIScrollView。所以我尝试添加像这样的容器视图

代码:

container = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];

scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,0,0)];
scrollView.pagingEnabled = YES;  
scrollView.showsVerticalScrollIndicator = NO;  
scrollView.showsHorizontalScrollIndicator = NO;  
// EDIT: ofcourse, I'm also resizing the frame with [scrollView setContentSize:] later, but this is farfetched code to add here.

[container addSubview:scrollView];
self.view = container;

不幸的是,似乎我根本没有得到任何结果,看起来只是一个空视图。但是,如果我添加UILabel或类似的,它会显示:

[container addSubview:[[UILabel alloc] initWithFrame:CGRectMake(50,50,50,50)]];  // entered above or beneath the addSubview:scrollView line.  

我的问题是:为什么我的scrollView不出现在UIView容器中?

我注意到有些教程说scrollView必须有一个委托,我同意逻辑 - 但是当我在CustomUIViewController-class而不是my时,我似乎无法找到我如何设置该委托的AppDelegate。

2 个答案:

答案 0 :(得分:1)

更改UIScrollView大小后,您应该使用:

[scrollView setNeedsDisplay:YES];

您也可以像在其他类中一样实现Delegates:

·H:

@interface MyClass : NSObject <UIScrollViewDelegate>

答案 1 :(得分:1)

好的,问题似乎是初始化 - 我没有意识到框架和内容是两个不同的东西。看起来像初始化视图的框架应该是视图应该填充的任何大小,而内容是应该滚动的任何内容。因此,当我遇到用户交互问题时,就是这样。

为什么它首先没有显示的问题是(愚蠢的)框架最初是,并且从未改变过0,0所以我真的在第一篇文章中撒谎。

感谢UIScrollView and PageControl: space between views通过用户互动解决了我的问题。

我的步骤是从self.view回溯:     的NSLog(@ “%F \ N%F”,     ((UIScrollView *)[[self.view subviews] objectAtIndex:0])。frame.size.width,     ((UIScrollView *)[[self.view subviews] objectAtIndex:0])。frame.size.height);

当我意识到这些是0和0时,解决问题并不是太难:)尽管如此,感谢Kristian的努力。