使用autolayout时,UIScrollview的中心内容

我在我的项目中使用autolayout,我有一个滚动视图,其中有一个按钮。 我已经滚动滚动视图,但不占用整个屏幕。

我试着按照这里的教程: https : //developer.apple.com/library/ios/technotes/tn2154/_index.html ,以及我在这里查看了一些类似的问题。 问题是我希望滚动视图的内容居中,而不是固定在顶部/底部/左/右。

这是我的视图层次结构:

在此处输入图像描述

你能帮帮我吗?

您已在滚动条视图及其超级视图之间添加了约束。 这些约束确定滚动视图的框架。 您可以将滚动视图视为一个窗口,通过该窗口可以看到后面的内容。 框架就是窗口的大小。 当然,您可以滑动窗口,这样您就可以看到部分内容的景点。

现在你有了窗口的大小,但你还需要告诉Xcode内容的大小。 如果你只是说把所有东西放在中间但没有告诉宽度,Xcode怎么知道中间在哪里?

所以,你必须告诉宽度(以及高度)。 让我们考虑一个简单的例子,如何在滚动视图中居中单个标签。

在此处输入图像描述

您应该首先将滚动视图的边缘固定到其超视图,就像您所做的那样。 之后,您应该在标签的边缘和滚动视图的边缘之间添加约束,此外,还应该添加标签的with和height约束。

前导空间,尾随空间和宽度一起给出了内容的内容,而顶部空间,底部空间和高度一起给出了内容的高度。

| —前导空间— |标签宽度| —尾随空间— |

| ———-滚动视图的内容————- |

但是您可能希望将内容视图的内容设置为等于屏幕的内容,然后您需要进行一些编程。 在代码中设置出口属性

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *trailingSpace; @property (weak, nonatomic) IBOutlet NSLayoutConstraint *leadingSpace; @property (weak, nonatomic) IBOutlet NSLayoutConstraint *width; 

在您的viewWillLayoutSubviews执行此操作

 CGFloat contentWidth = self.view.frame.size.width; CGFloat horiPadding = (contentWidth - self.width.constant) / 2; _trailingSpace.constant = horiPadding; _leadingSpace.constant = horiPadding; 

现在你的标签位于滚动视图的水平中心! 您的滚动视图已经知道其内容,因此您不需要为滚动视图中添加的任何其他视图执行此操作:您只需添加中心约束即可。

您也可以为高度做同样的事情。

在此处输入图像描述

在此处输入图像描述