Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 缩小UIScrollView以聚焦于特定页面_Objective C_Ios_Cocoa Touch_Uiview_Uiscrollview - Fatal编程技术网

Objective c 缩小UIScrollView以聚焦于特定页面

Objective c 缩小UIScrollView以聚焦于特定页面,objective-c,ios,cocoa-touch,uiview,uiscrollview,Objective C,Ios,Cocoa Touch,Uiview,Uiscrollview,我有一个带有水平分页的UIScrollView——类似于天气应用程序。在某些情况下,我希望防止用户水平滚动。简单地禁用滚动有点不和谐-我更愿意复制滚动过最后一页的体验-允许进行一点滚动,但由于没有更多内容,滚动视图会反弹回来 我该如何实施这一点?我应该更改ScrollView的contentSize吗?如何设置分页,以便有效地有一个“页面”,但仍有内容显示在紧邻的左侧和右侧?要始终使UIScrollView反弹,即使只有一个页面,请添加以下行: [self.scrollView setAlway

我有一个带有水平分页的
UIScrollView
——类似于天气应用程序。在某些情况下,我希望防止用户水平滚动。简单地禁用滚动有点不和谐-我更愿意复制滚动过最后一页的体验-允许进行一点滚动,但由于没有更多内容,滚动视图会反弹回来


我该如何实施这一点?我应该更改ScrollView的contentSize吗?如何设置分页,以便有效地有一个“页面”,但仍有内容显示在紧邻的左侧和右侧?

要始终使
UIScrollView
反弹,即使只有一个页面,请添加以下行:

[self.scrollView setAlwaysBounceHorizontal:YES];
当然,除了我关于缩小
contentSize
的评论之外


编辑:

好的,让我先解释一下我们想要实现的目标。用户正在
UIScrollView
中的页面之间愉快地滚动,突然,我们希望
UIScrollView
能够坚持当前页面,,它可能是也可能不是第一页

我们的
uicrollview
具有页面布局,每个页面由单个
UIView
或其子类表示(它本身可能有子视图):

现在,要执行所解释的任务,代码如下:

CGFloat pageWidth = _scrollView.bounds.size.width;
int currentPage = (_scrollView.contentOffset.x / pageWidth);

[_scrollView setContentSize:CGSizeMake(pageWidth, _scrollView.contentSize.height)];
// move each page to the left:
for (UIView* page in _scrollView.subviews) {
    [page setFrame:CGRectOffset(page.frame, -currentPage * pageWidth, 0)];
}

注意:如果您有一个复杂的视图层次结构,只需将其包装在一个
UIView
中,该视图的边界大小等于
\u scrollView.contentSize
所有页面。剩下的我留给读者作为练习(我一直想说xD)

上面Mazyod的答案可能是最好的答案,但是我很难将视图返回到原始位置,并以一种对用户隐藏的方式调整
contentSize
的大小。我使用了下面的方法

我只需创建一个大小有限的新scrollview,并将其放置在现有scrollview的顶部。我将三个视图(正在使用的一个视图和两边的视图)移动到这个临时滚动视图中,根据Mazyod的回答调整它们的原点

当需要恢复时,我只需将视图移回真实的scrollview并删除临时视图


效率不高,但这是一个可行的选择。

只需缩小内容大小。将内容大小的宽度设置为1*内容的宽度将完全停止滚动,而不会反弹。谢谢。我还需要弄清楚如何调整
contentOffset
或其他一些属性,否则调整
contentSize
的大小会迫使我的
UIScrollView
滚动到内容的一个可查看部分。@BenPackard simple。首先,是否直接将子视图(页面)添加到
UIScrollView
?或者您是否有一个包含
UIScrollView
中的视图的
UIView
?(即滚动视图->视图->页面)?前者。每个视图都被添加为
UIScrollView
@BenPackard的子视图好吧,如果是后者,我会马上发布代码。让我快速测试一下,然后发布解决方案。这非常有用-谢谢。我怀疑我需要以某种方式暂时“改变”观点。这是非常清楚和简洁的。我将试一试,看看它会把我带到哪里——显然,当我需要重新启用滚动时,我也应该执行反向移位(并同样增加
contentSize
)。