UIScrollView 不会在 UIView 中显示

Posted

技术标签:

【中文标题】UIScrollView 不会在 UIView 中显示【英文标题】:UIScrollView won't show in UIView 【发布时间】:2011-03-31 10:47:22 【问题描述】:

我的应用程序纯粹以编程方式在 UINavigationController 上方的 UITabBarController 上构建,它们都在我的 AppDelegate 中声明。在我的导航控制器中,我展示了一个 UIViewController,一个自定义类。这个自定义类应该在 UIScrollView 和 UIPageControl 中显示自定义 UIView。

这是我的问题:self.view 似乎在我调用它而不声明 self.view = [[UIView alloc ] init] (或类似的)。我想知道这是否是 -(void) loadView 的问题,但似乎它会在 -(void)viewDidLoad 中产生相同的错误。所以我基本上不得不使用 self.view = 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 类而不是我的AppDelegate。

【问题讨论】:

主要问题是 self.view = scrollView 和 [self.view addSubview:scrollView] 之间存在差异,我似乎无法弄清楚为什么 【参考方案1】:

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

[scrollView setNeedsDisplay:YES];

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

.h:

@interface MyClass : NSObject <UIScrollViewDelegate>

【讨论】:

就像我说的,我在将 scrollView 放入 UIView 时遇到问题,但是当我将 scrollView 直接放入 self.view 时,它显示得很好。感谢您的提示,但它没有解决我的问题:(。setNeedsDisplay 不带参数 btw :) 似乎当我向容器添加视图时,我也无法与之交互......奇怪。【参考方案2】:

好的,问题似乎在于初始化 - 我没有意识到框架和内容是两个不同的东西。似乎初始化视图的框架应该是视图应该填充的任何大小,而内容是应该滚动的任何内容的实际内容。所以当我遇到用户交互问题时,真的是这样。

为什么它一开始没有显示的问题是(愚蠢的)框架最初是 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 的努力。

【讨论】:

没问题 :) 很高兴听到你想通了 :D

以上是关于UIScrollView 不会在 UIView 中显示的主要内容,如果未能解决你的问题,请参考以下文章

UIView 不会在 UIScrollView 内垂直滚动

UIScrollView的不会滚动!

UIScrollView中的UIView不出现

自定义 UIView 中的 UIScrollView 不滚动

有没有办法将 UIView 嵌入到 UIScrollview 中而不会丢失 iOS 中的子视图约束?

调整 UIView 的大小以便 UIScrollView 工作