如何维护UIScrollView,使子视图始终保持可见



我正在使用一个UIScrollView来显示水平滚动的UIButtons。现在,当我选中并高亮一个按钮时,我不应该将该按钮滚动出视图。现在我只允许一个按钮被选中。

考虑问题后:如何停止一个UIScrollView在一个特定的点?并实现如下:

-(void) scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
    if(targetContentOffset->x==0){
        return;
    }else if(targetContentOffset->x>self.maxScrollPoint.x){
        targetContentOffset->x=self.maxScrollPoint.x;
    }else if (targetContentOffset->x<self.maxScrollPoint.x+self.componentView.frame.size.width){
        targetContentOffset->x=self.maxScrollPoint.x+self.componentView.frame.size.width;
    }
 }

其中maxScrollPoint是Scrollview中UIButton的原点。这个实现允许用户滚动到可见矩形之外,然后滚动回按钮的原点。

我是否可以限制scrollview停止滚动超过该点,也超过scrollview的最大可见宽度(不是contentsize)

您可能想要这样的内容:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (_selectedButton != nil)
    {
        CGRect oldFrame = _selectedButton.frame;
        oldFrame.origin = scrollView.contentOffset;
        _selectedButton.frame = oldFrame;
    }
}

这个想法是,每当滚动视图滚动时,_selectedButton(如果有的话)将把它的原点放在滚动视图当前框架的左侧。您可能需要稍微修改一下,但它应该可以工作。

最新更新