如何维护UIScrollView以便始终保持可见的子视图?

时间:2014-07-16 16:26:22

标签: ios objective-c uiscrollview

我正在使用UIScrollView显示水平滚动的UIButtons。 现在,当我选择并突出显示一个按钮时,我不能将该按钮滚出视图。我只允许选择一个按钮。

在考虑了问题后:How to stop a UIScrollView at a specific point?并实施了以下内容:

-(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的原点。此实现允许用户滚动到可见的rect之外,然后滚动回按钮的原点。

无论如何,我可以限制滚动视图停止滚动超过该点,也超出滚动视图的最大可见宽度(不是内容大小)

1 个答案:

答案 0 :(得分:0)

你可能想要这样的东西:

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

这个想法是每当滚动视图滚动时,_selectedButton(如果有的话)将其原点放在滚动视图当前帧的左侧。你可能不得不修补一下,但它应该有用。