我正在尝试创建一个图表,其中以UIView形式的条形图显示在背景UIView的顶部。我希望两者都显示在整个屏幕的UIView上。我已经成功完成了此操作,但是尽管可以显示第一个视图,但是我却无法以某种方式显示代码。可能与设置颜色有关吗?还是有人可以建议为什么不显示第二个子视图。
我的代码:
//Make background box:
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat graphWidth = screenWidth-40;
CGFloat graphHeight = 160;
CGRect graphBounds =CGRectMake(20, 200, graphWidth, graphHeight);
float tableStartY = graphBounds.origin.y;
UIView *graphBox = [[UIView alloc] initWithFrame:graphBounds];
graphBox.backgroundColor = [UIColor colorWithRed:200.0/255.0 green:200.0/255.0 blue:200.0/255.0 alpha:0.2]; graphBox.layer.borderWidth = 1;
graphBox.layer.borderColor = [UIColor blueColor].CGColor;
//Make Bar
CGFloat barWidth = 20;
CGFloat barHeight = 100;
CGRect aBar = CGRectMake(20, tableStartY+1, barWidth, barHeight);
UIView *barView = [[UIView alloc] initWithFrame:aBar];
barView.backgroundColor = [UIColor blueColor];
barView.layer.borderWidth = 1;
barView.layer.borderColor = [UIColor redColor].CGColor;
// [graphBox addSubview:barView];
[self.view addSubview: graphBox];
如果运行上面的代码,它将显示graphBox。如果我将条形图作为子视图而不是graphBox直接添加到视图中,则显示条形图。但是,如果我取消注释显示的行,然后先将barView添加到graphBox,然后再将graphBox添加到视图,则不会显示barView。
预先感谢您的任何建议。
答案 0 :(得分:1)
如果我正确理解您需要做什么,则应该更换
CGRect aBar = CGRectMake(20, tableStartY+1, barWidth, barHeight);
使用
CGRect aBar = CGRectMake(20, 1, barWidth, barHeight);
[edit:显然取消了addSubview行的注释]
答案 1 :(得分:1)
也许这是您发布的代码中的意外,但是您特别注释了osprey-mock-service
将添加到屏幕的位置。
barView
此外,如another answer所示,如果将 // [graphBox addSubview:barView];
添加到barView
,则偏移量是不正确的。如果您将其添加到graphBox
,则偏移量是正确的。
因此,根据视图层次结构中所需的包含性,您有两种选择:
self.view
或
CGRect aBar = CGRectMake(20, 1, barWidth, barHeight);
// ...
[graphBox addSubview:barView];
请注意,在第二个选项中,顺序很重要,这样才能使CGRect aBar = CGRectMake(20, tableStartY+1, barWidth, barHeight);
// ...
[self.view addSubview: graphBox];
[self.view addSubview:barView];
显示在barView
上方,因为它们将成为同级。