【发布时间】:2018-08-24 04:00:28
【问题描述】:
我需要在UIScrollView中添加一个containerView,然后在containerView中添加多个子视图。出于某种原因,containerView 不遵守 top/bottom/left/rightAnchor 约束,但它适用于 width/height/centerX/centerYAnchor
注意:如果超级视图是UIView 而不是UIScrollView,它可以正常工作。
该项目是 100% 基于代码的。使用 Swift 4.1 和 Xcode 9.4
这不起作用
containerView.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 0).isActive = true
containerView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 0).isActive = true
containerView.leftAnchor.constraint(equalTo: scrollView.leftAnchor, constant: 0).isActive = true
containerView.rightAnchor.constraint(equalTo: scrollView.rightAnchor, constant: 0).isActive = true
这行得通
containerView.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
containerView.heightAnchor.constraint(equalTo: scrollView.heightAnchor).isActive = true
containerView.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor).isActive = true
containerView.centerYAnchor.constraint(equalTo: scrollView.centerYAnchor).isActive = true
在这两种情况下,scrollView.constraints 数组总共包含 4 个约束。
有趣的是它们的打印输出是不同的。一些不起作用的约束(.top 和 .left)是使用 Autolayout Visual Format Language 打印的。另外,请注意第三个中的 (LTR):
ScrollView [
<NSLayoutConstraint:V:|-(0)-[UIView] (active, names: '|':UIScrollView:)>,
<NSLayoutConstraint:UIView.bottom == UIScrollView.bottom (active)>,
<NSLayoutConstraint:H:|-(0)-[UIView](LTR) (active, names: '|':UIScrollView:)>,
<NSLayoutConstraint:UIView.right == UIScrollView.right (active)>]
有效的约束打印如下:
ScrollView [
<NSLayoutConstraint:UIView.width == UIScrollView.width (active)>,
<NSLayoutConstraint:UIView.height == UIScrollView.height (active)>,
<NSLayoutConstraint:UIView.centerX == UIScrollView.centerX (active)>,
<NSLayoutConstraint:UIView.centerY == UIScrollView.centerY (active)>]
我研究了 StackOverflow 并发现了几个问题,例如 this,但它们并没有真正帮助我解释问题是什么(或 UIScrollView 对约束的要求)。
有什么想法吗?
【问题讨论】:
标签: ios autolayout constraints anchor