如何使 uiscrollview 仅垂直滚动 ios?

How to make uiscrollview only vertical scrolling for ios?

我正在尝试使用这个 tutorial link

scrollview 中制作 layout

并得到如下结果link

如有任何建议或教程链接,我们将不胜感激。它只需要垂直滚动

像下面的代码那样设置UIScrollView约束太多,所以它会占据整个screen.Not超过屏幕大小。

Leading Space = 0 from mainView
Top Space = 0 from mainView
Bottom Space = 0 from mainView 
Trailing Space = 0 from mainView

您需要将 UIScrollView 的宽度设置为等于或小于父视图的宽度。两种方法:

1) 您可以通过布局约束在 Storyboard 中执行此操作

2) 您可以通过编程方式执行此操作:

self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.scrollView.contentSize.height);

尝试将其宽度设置为 0,高度等于内容大小,如下所示:

self.scrollView.contentSize = CGSizeMake(0, self.scrollView.contentSize.height);

这将如您所愿。尝试一下,看看是否仍然遇到任何问题。

我相信一定有其他方法可以做到这一点,但一个快速的解决办法是:

1.) 在 Storyborad 的 ContentView 上创建一个宽度约束。

2.) IBOutlet widthContraint 并在viewDidLoad 中将其值设置为view frame width。

假设约束出口的名称是contentViewWidthContraint。

contentViewWidthContraint.constant = self.view.bounds.size.width;

如果 Scrollview 已经具有与 superview 的等宽约束,则从 Storyboard 执行此操作的另一种方法是将 Contentview 宽度固定为 Storyboard 或 Scrollview 中的视图宽度。将 Contentview 的 "Equal Width" 约束添加到 self.view 或 Scrollview(如果是 scrollview,已经有宽度约束)

要禁用水平滚动,您可以在-(void)scrollViewDidScroll方法中设置内容大小。

[self.scrollView setContentOffset: CGPointMake(0, self.scrollView.contentOffset.y)];
self.scrollView.directionalLockEnabled = YES;

您是否已将“ContentView”宽度设置为与滚动视图宽度相匹配?我遇到了同样的问题,我修复了“等宽”。

"Equal Widths" 将告诉您的“ContentView”使用与“Scroll View”相同的宽度,如果您设置了适当约束。

您可以在故事板上轻松完成此操作。

  1. 从“ContentView”拖放至“ScrollView”

  2. 松开点击,系统会提示您一个菜单,select“等宽”。

这应该可以解决您在情节提要编辑器中使用滚动视图和自动版式的问题。

您可以找到完整的教程,了解如何将 ScrollView 与自动布局和情节提要一起使用 here

希望这对你有用:)

在 Storyboard 中,将 UIScrollView 中包含的元素的宽度设置为等于此 UIScrollView 的宽度(通过选择 Storyboard 左侧面板中的所有元素和 UIScrollView,然后设置 'Equal Widths' 约束在故事板底部的 'Pin' 下)。仅仅将元素的右侧固定到 UIScrollView 的右侧是行不通的,因为它会将其 "display view" 的大小调整为最大元素的宽度,如果它小于 UIScrollView 所有元素的宽度只会出现在其左侧对齐。

还有另一种可能提供了很好的结果。

您可以标记一个复选框:

O 以编程方式:

scrollView.alwaysBounceVertical = true

这是因为滚动视图不知道您的内容应该在哪里结束。

但是当滚动视图中的至少一个项目将其 "trailing space" 约束附加到滚动视图外部的视图时(通常是滚动视图所在的视图或更高级别的其他视图, "knows" 它的宽度)- 滚动视图将自动了解您想要的宽度并且不会水平滚动(除非尾随约束意味着您的内容在屏幕之外)。

如果滚动视图内的所有项目都将其 "trailing space" 约束相互连接或连接到滚动视图外的视图,那就更好了。但不是滚动视图本身。

不需要额外的代码或额外的约束就可以工作。