将滚动视图(将pagingEnabled设置为YES)的最简单方法是将页面宽度设置为除滚动视图边界以外的其他内容吗?
让我举个例子。假设我有一个包含10个项目的滚动视图,每个项目宽150像素,我的滚动视图宽300像素。如果我从视图1和2开始可见并向右水平滚动,我希望下一个“页面”显示项目2和3.如果我向右滚动一页,我会看到项目3和4。
有人这样做过吗?如果没有,你会采用什么策略?
答案 0 :(得分:44)
Alexander Repty刚刚在博客上发表了关于这个主题的文章:http://blog.proculo.de/archives/180-Paging-enabled-UIScrollView-With-Previews.html。简短的回答:它并不像改变“页面”的宽度那么简单,但它并不太难。
答案 1 :(得分:5)
麦克,
使用Ben关联您的博客中的方法。使UIScrollView的大小是周围视图的一半(即150px)并将其移动到左侧,而不是让它居中。
这应该可以为您提供所需的行为。
干杯, 亚历
答案 2 :(得分:4)
肯定可以借助 scrollview委托方法& 内容偏移强>
以下是相同的详细代码。
int start;
int end;
int k=0;
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView1
{
pageControlUsed = NO;
start = scrollView.contentOffset.x;
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView1 willDecelerate:(BOOL)decelerate
{
end = scrollView.contentOffset.x;
}
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView1{
int diff = end-start;
if (diff>0)
{
k=k+150;
[scrollView setContentOffset:CGPointMake(k, 0) animated:YES];
}
else {
k=k-150;
[scrollView setContentOffset:CGPointMake(k, 0) animated:YES];
}
}
答案 3 :(得分:2)
只需覆盖scrollViewWillEndDragging
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
CGFloat pageWidth = 160;
targetContentOffset->x = pageWidth * (int)(targetContentOffset->x / pageWidth);
}
答案 4 :(得分:1)
UIScrollView *album = [[UIScrollView alloc] init];
album.translatesAutoresizingMaskIntoConstraints = NO;
album.pagingEnabled = YES;
album.clipsToBounds = NO;
album.showsHorizontalScrollIndicator = NO;
album.contentInset = UIEdgeInsetsMake(0, -50, 0, -50);
[view addSubview:album];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[_album(220)]" options:0 metrics:metrics views:views]];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_album(300)]" options:0 metrics:metrics views:views]];
这适用于iOS 7.1~8.2