3

我的问题是:在我的应用程序中,我想使用UIScrollView

在此处输入图像描述

他的UIScrollView所有内容都在里面。但是当我到达屏幕顶部(或者可能是屏幕底部)时,我想锚定一些内容,例如在 AppStore (iOS 6) 中。

在此处输入图像描述

在这种情况下,“详细信息”、“评论”和“相关”按钮停止滚动并保持固定在顶部。

有人知道该怎么做吗?

4

2 回答 2

8

如果您的滚动视图还没有委托,请给它一个委托。这可能是您的视图控制器。

还要给委托一个对浮动视图的引用。(在示例中,浮动视图包含“Dettagli”、“Recensioni”和“Correlati”按钮,并且浮动视图在三角形缺口处是透明的,阴影也是浮动视图的一部分。) view 必须是滚动视图的子视图。

将浮动视图框架的“正常”Y 坐标保存在实例变量中。例如,如果委托是一个视图控制器,你可能应该这样做viewDidLoad

- (void)viewDidLoad {
    [super viewDidLoad];
    originalFloatingViewY = floatingView.frame.origin.y;
}

在委托的scrollViewDidScroll:方法中,检查滚动视图是否已经滚动到浮动视图“正常”位置的顶部下方。如果是这样,将浮动视图移动到可见区域的顶部边缘:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    [self updateFloatingViewFrame];
}

- (void)updateFloatingViewFrame {
    CGPoint contentOffset = scrollView.contentOffset;

    // The floating view should be at its original position or at top of
    // the visible area, whichever is lower.
    CGFloat y = MAX(contentOffset.y, originalFloatingViewY);

    CGRect frame = floatingView.frame;
    if (y != frame.origin.y) {
        frame.origin.y = y;
        floatingView.frame = frame;
    }
}

您也可以通过子类化UIScrollView和覆盖来做到这一点layoutSubviews。观看来自WWDC 2011的“高级 ScrollView 技术”视频,了解有关此技术的更多信息。

于 2012-10-23T08:39:24.037 回答
0

您需要在UIScrollView's委托方法(scrollViewDidScroll:) 中处理此问题以进行滚动。当yofscrollview达到该特定值时,您需要单独禁用该方向的滚动。您只需要在其中添加一个 if 条件即可y在滚动时检查并重置该点。为此,您可能必须将此特定部分作为单独的滚动视图保留在下方内容之外,并将其与下方滚动视图的向上移动一起移动。

于 2012-10-23T08:10:33.943 回答