使用autolayout时,UIScrollview的中心内容

时间:2014-07-29 17:45:48

标签: ios objective-c uiscrollview autolayout

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

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

这是我的视图层次结构:

enter image description here

你能帮帮我吗?

1 个答案:

答案 0 :(得分:7)

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

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

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

enter image description here

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

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

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

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

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

@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;

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

你也可以为身高做同样的事情。

enter image description here

enter image description here