在UIScrollView iOS的原点上方添加视图



我正在尝试将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)];

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

但有了上面的代码,它现在确实显示了上面添加的视图。

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

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

编辑:

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

您应该提前计算总内容大小(就像UITableView通过调用heightForRowAtIndexPath所做的那样),并将子视图放置在滚动视图的边界内。因此,在这种情况下,视图A将处于(0,500),视图B将处于(O,0)。您可以在滚动时动态添加和删除视图,但提前设置内容大小会让事情变得更容易。

最新更新