关于视图层次结构,需要澄清
Posted
技术标签:
【中文标题】关于视图层次结构,需要澄清【英文标题】:On view hierarchy, clarification needed 【发布时间】:2011-11-21 00:08:01 【问题描述】:在此代码示例中,我试图生成以下视图层次结构
窗口 -> 背景图片 -> 滚动视图 -> 文本视图
我看到的只是
窗口 -> 背景图片
请问我错过了什么?
-(void) viewWillAppear:(BOOL)animated
UIScrollView *scrollWindow = [[UIScrollView alloc]
initWithFrame:CGRectMake(30, 30, 440, 212)];
UITextView *scrollableText = [[UITextView alloc] init];
[scrollableText setEditable:NO];
[scrollableText setText:@"Why, hello there"];
[scrollWindow addSubview:scrollableText];
UIImage *backgroundImage = [[UIImage alloc] initWithCGImage:
[UIImage imageNamed:@"about_bg.png"].CGImage];
UIImageView *backgroundView = [[UIImageView alloc]
initWithImage:backgroundImage];
[backgroundView addSubview:scrollWindow];
[[self view] addSubview:backgroundView];
【问题讨论】:
UITextView 已经是 UIScrollView 的子类。您确定在层次结构中还需要一个滚动视图吗? @Davyd,谢谢。我之前没有意识到这一点 【参考方案1】:Andrew 关于不让滚动视图成为背景UIImageView
视图的子视图是正确的。但是滚动视图是不可见的。只会显示其内容 (scrollableText
)。而且你还没有设置scrollableText
的框架,所以它实际上也是不可见的。像这样初始化:
[scrollableText setEditable:NO];
[scrollableText setText:@"Why, hello there"];
[scrollableText setFrame:CGRectMake(0, 0, 100, 100)];
你应该会看到的。
【讨论】:
对文本视图框架的良好调用。但是在视图上......你是说滚动视图和背景图像视图在层次结构上应该是相等的吗? 是的(由答案编辑以使其更加清晰)。它可能会起作用,这可能是一种风格上的东西,但在我看来:UIImageView
的层和子视图是一个实现细节。它会执行一些非特定且未记录的操作来显示图像。谁知道现在和将来这将如何与用户添加的子视图交互?这与奇怪的行为相结合,例如它从不调用 -drawRect:
,并且默认情况下用户与它的交互是 disabled 的,我觉得在 UIImageView
s 之上合成视图比弄乱它们的层次结构更安全.【参考方案2】:
你需要的是这个层次结构:
Window
background image view
scroll view
text view
尝试将两个子视图添加到您的窗口中,而不是将它们作为子视图相互推挤。''-
- (void) viewWillAppear:(BOOL)animated
UIScrollView *scrollWindow = [[UIScrollView alloc] initWithFrame:CGRectMake(30, 30, 440, 212)];
UITextView *scrollableText = [[UITextView alloc] init];
UIImageView *backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"about_bg.png"]];
scrollableText.editable = NO;
scrollableText.text = @"Why, hello there";
[scrollWindow addSubview:scrollableText];
[self.view addSubview:backgroundView];
[self.view addSubview:scrollWindow];
【讨论】:
以上是关于关于视图层次结构,需要澄清的主要内容,如果未能解决你的问题,请参考以下文章