UIScrollView AutoLayout仅垂直

Gas*_*sim 25 objective-c uiscrollview ios autolayout swift

我想让AutoLayout UIScrollView与它一起工作,并且我遇到了一些麻烦.这是我做的:

  1. UIScrollView在主视图内添加框架:[top:0,left:0,width:320,height:568]

  2. UIViewUIScrollViewwith frame和bgcolor black中添加"ContentView" :[top:0,left:0,width:320,height:568]

  3. 设置UIScrollView约束:[top:0,bottom:0,left:0,right:0]

  4. 设置"ContentView"约束:[top:0,bottom:0,left:0,right:0]

  5. 对齐"ContentView"中的项目

  6. 将主视图bgcolor设置为灰色(查看发生了什么)

以下是问题的屏幕截图:http://imgur.com/P8s9lB0

由于某种原因,约束使内容视图位于屏幕的中间.此外,它向各个方向滚动.我希望内容只能在垂直方向上滚动UITableView,所以我不能这样移动:http://imgur.com/lBCwfAS

我究竟做错了什么?我已经检查了StackOverflow和Google中可以找到的所有教程和答案,并且没有人真正有一个奇怪的问题,所以我正在寻求帮助.

编辑:我还添加了ContentView的宽度和高度作为约束,这也没有帮助.

Chr*_*emp 41

您可以完全使用约束来完成此操作,这非常简单.

UIScrollView只需要了解多少宽度和空间具有里面.因此,它需要有一些固定的Leading,Trailing,TopBottom约束.内容的宽度和高度也需要修复(这并不意味着我必须具体说明.我仍然可以使用约束来实现这一点.)

  1. UIScrollView根据需要添加和位置.
  2. 添加一个UIView内部UIScrollView的内容.
  3. 设置Leading,Trailing,TopBottom内容的限制UIView是0.
  4. Equal WidthUIScrollView和添加约束UIView.这将使其仅垂直滚动.
  5. 您现在需要设置内容的高度UIView.然后,您可以指定内容视图的高度(blech),也可以通过确保底部控件约束到内容视图的底部来使用其中包含的控件的高度.

我做到了这一点并且有所作为.

  • 这是我一直在寻找的答案.我让contentView等于UIScrollView的superview.谢谢 (3认同)
  • 谢谢,等宽度约束是我需要的. (2认同)

小智 20

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

[self.scrollView setContentOffset: CGPointMake(0, self.scrollView.contentOffset.y)];
Run Code Online (Sandbox Code Playgroud)

您还需要设置方向锁定,因此一次只能使用1个滚动方向. https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIScrollView_Class/index.html#//apple_ref/occ/instp/UIScrollView/directionalLockEnabled

self.scrollView.directionalLockEnabled = YES;
Run Code Online (Sandbox Code Playgroud)


Bri*_*ian 8

在 Xcode 12.1 垂直滚动视图设置中使用 Swift 4-5 进行测试

  1. 添加滚动视图并将顶部、底部、左侧和右侧约束设置为 0。 在此输入图像描述
  2. 通过在大小检查器中取消选择滚动视图“内容布局指南”来删除它。在此输入图像描述
  3. 将 uiview 添加到滚动视图。 在此输入图像描述

4.我们需要设置与滚动视图相关的uiview的约束。按住 Control 单击 uiview,然后附加到滚动视图。

在此输入图像描述

  1. 这就带来了两者之间的制约。

在此输入图像描述

  1. 按住 Shift 键可选择多个。我们需要添加等宽、等高、前导、尾随、顶部和底部。

在此输入图像描述

  1. 将“等高度”编辑为:超级视图优先级从 1000 更改为 250。

在此输入图像描述

  1. 现在添加内容。为了简单起见,我在属性检查器中添加了一个图像和一个包含 0 行的标签,并且视图中的大量文本确实加载了。

在此输入图像描述

  1. 最后结果!

在此输入图像描述


n13*_*n13 7

总结一下Leszek S的答案:

为了具有垂直滚动视图,滚动视图内的所有视图必须设置其 宽度约束.很容易设置为滚动视图的超级视图.

原因是滚动视图不会水平滚动,只要其子视图不需要水平滚动即可.例如,如果您有一个标签,设置为0行,自动布局将尝试在开始添加行和换行符之前使标签尽可能宽.如果标签上没有明确的宽度约束,它只会使滚动视图内容区域更宽.跟踪滚动视图的约束将被忽略.

如果您有一堆视图,您可能希望将它们放在包含该视频的单个视图中.对于我的情况,我只有5或6个标签,可以动态改变高度,但不应该改变宽度,所以我只是使它们的宽度与滚动视图相同.和宾果游戏,垂直滚动视图,标签根据文本增长或缩小.