1

我正在尝试在其原点上方添加 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)];

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

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

4

2 回答 2

2

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

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

编辑:

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

于 2013-08-19T15:42:08.870 回答
1

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

于 2013-08-20T13:51:47.573 回答