在UIScrollView iOS的原点上添加视图

时间:2013-08-19 15:37:04

标签: ios uiscrollview

我正在尝试将UIViews添加到其原点之上。

例如

假设我在原点添加了子视图A(x = 0,y = 0); 现在我想在此子视图上方添加另一个子视图B,所以我尝试了

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, -500, 200, 500)];
view.backgroundColor = [UIColor redColor];
[scrollView addSubview:view];

[scrollView setContentOffset:CGPointMake(0, 500)];
[scrollView setContentSize:CGSizeMake(300, scrollView.frame.size.height+500)];

我想在滚动到顶部时添加许多这样的视图,即当scrollview到达顶部时,在当前视图上方添加另一个视图,滚动应该没有任何缺失。

但是使用上面的代码,它现在显示上面添加的视图。

2 个答案:

答案 0 :(得分:2)

如果我正确地理解了这一点,你就会以错误的方式看待这个问题。如果您的滚动视图的总内容大小为1000,并且您将内容偏移设置为500,那么如果要在滚动视图的可见顶部上方添加500以上的视图,则应设置该视图原点为0.虽然您希望此视图在滚动视图的当前可见部分上方出现500点,但您必须在滚动视图的坐标空间中创建坐标,该坐标从0到左边开始,顶部到底部。试试这个:

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 500)];

编辑:

由于您要将此视图移动到现有子视图上方,因此必须调整两个对象的帧。新视图仍然如上所列进行设置,但您需要在现有视图上调用setFrame:,并将其y原点设置为至少测量您在上面添加的视图高度的值它

答案 1 :(得分:1)

您应该预先计算总内容大小(通过调用UITableView,如heightForRowAtIndexPath所做),并将您的子视图放在滚动视图的边界内。所以在这种情况下,视图A将是(0,500),视图B将是(0,0)。您可以在滚动时动态添加和删除视图,但预先设置内容大小会使事情变得更容易。