ScrollviewDidScroll在每个点都没有调用

时间:2014-06-11 11:42:56

标签: ios objective-c uiscrollview

我的视图控制器底部有一个按钮。当用户向下滚动时,按钮必须在特定高度附加到滚动视图。

contentOffset.y达到特定值时,我需要立即在滚动视图上附加一个按钮。 -(void) scrollviewDidScroll对我没有帮助,因为当用户快速滚动时,contentOffset可能会跳转。这方面的任何线索都是有帮助的。

此外,每当我向滚动视图添加子视图时,都会调用-(void) viewDidLayoutSubviews。然后将contentOffset设置为{0,0}。如何实现我需要的功能?

1 个答案:

答案 0 :(得分:0)

我需要使用UITableView做同样的事情并且使用scrollViewDidScroll工作。

我创建了一个名为staticBar的视图,并将其添加为tableView的子视图,但我不得不重新排列tableview子视图,使其显示在正确的位置。我没有在我面前的代码,但在-scrollViewDidScroll:它看起来像这样:

- (void)scrollViewDidScroll:(UIScrollView*)scrollView
{
    CGFloat staticBarAdjustedY = _staticBarY - scrollView.contentOffset.y;
    CGFloat scrollViewYFloor = scrollView.frame.size.height - _staticBar.frame.size.height;
    // This way maximum Y the view can have is at the base of the scrollView
    CGFloat newY = MIN( staticBarAdjustedY, scrollViewYFloor);
    _staticBar.frame = (CGRect){ { _staticBar.frame.origin.x, newY}, _staticBar.frame.size}
}

我今天晚些时候会检查我的代码并在此处添加更多详细信息。

另外,你说scrollviewDidScroll在contentOffset中有跳转,但值得一提的是这些跳转与scrollView用来滚动自己的视图相同。所以这并不像你在这个委托方法上“丢失”帧。

希望它有所帮助。

PS:所以,这是我的其余代码。

//I place my custom view as a subview of the tableView below it's last subview
//The last subview is for scroll indicators.
WTButtonsBar *buttonBar = [[WTButtonsBar alloc] init];
[self.tableView insertSubview:buttonBar belowSubview:self.tableView.subviews.lastObject];

scrollViewDidScroll:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    //In my app I needed my view to stick to the top of the screen
    //thats why I use MAX here
    //self.buttonsBarOriginalY is the view's position in the scrollView when it isn't attached to the top.
    CGFloat newY = MAX(scrollView.contentOffset.y, self.buttonsBarOriginalY)
    [_buttonsBar setFrame:(CGRect){{0, newY}, _buttonsBar.frame.size}];
}