我的视图控制器底部有一个按钮。当用户向下滚动时,按钮必须在特定高度附加到滚动视图。
当contentOffset.y
达到特定值时,我需要立即在滚动视图上附加一个按钮。 -(void) scrollviewDidScroll
对我没有帮助,因为当用户快速滚动时,contentOffset
可能会跳转。这方面的任何线索都是有帮助的。
此外,每当我向滚动视图添加子视图时,都会调用-(void) viewDidLayoutSubviews
。然后将contentOffset设置为{0,0}
。如何实现我需要的功能?
答案 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}];
}