使用autolayout时,UIScrollview的中心内容

jan*_*kes 7 objective-c uiscrollview ios autolayout

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

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

这是我的视图层次结构:

在此输入图像描述

你能帮帮我吗?

uki*_*kim 7

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

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

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

在此输入图像描述

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

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

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

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

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

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *trailingSpace;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *leadingSpace;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *width;
Run Code Online (Sandbox Code Playgroud)

在你viewWillLayoutSubviews这样做

CGFloat contentWidth = self.view.frame.size.width;
CGFloat horiPadding = (contentWidth - self.width.constant) / 2;
_trailingSpace.constant = horiPadding;
_leadingSpace.constant = horiPadding;
Run Code Online (Sandbox Code Playgroud)

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

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

在此输入图像描述

在此输入图像描述