以编程方式添加时,rightAnchor 约束不适用 - swift

Posted

技术标签:

【中文标题】以编程方式添加时,rightAnchor 约束不适用 - swift【英文标题】:rightAnchor constraint did not apply when added programmatically - swift 【发布时间】:2018-07-18 06:30:04 【问题描述】:

当我添加 rightAnchor 约束时,常量 = 20 不适用。在leftAnchor就可以了

override init(frame: CGRect) 
    super.init(frame: frame)

    addSubview(collectionView)
    collectionView.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([collectionView.leftAnchor.constraint(equalTo: leftAnchor, constant: 20),
                                 collectionView.topAnchor.constraint(equalTo: self.topAnchor),
                                 collectionView.rightAnchor.constraint(equalTo: rightAnchor, constant: 20),
                                 collectionView.heightAnchor.constraint(equalTo: self.heightAnchor)])

有人可以帮我吗?

【问题讨论】:

您可能需要leadingAnchortrailingAnchod 而不是左/右,因为它们会自动尊重从右到左的语言环境 【参考方案1】:

我有一种强烈的感觉,那就是你想为rightAnchor 做的事情。

collectionView.rightAnchor.constraint(equalTo: rightAnchor, constant: -20)

如果您想从右侧或底部填充,您应该使用负值。


经验法则:任何东西留下或向上的东西都是负面的。

【讨论】:

【参考方案2】:

您正在添加 20+rightAnchor 的超级视图。应该是-20

addSubview(collectionView)
collectionView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([collectionView.leftAnchor.constraint(equalTo: leftAnchor, constant: 20),
                             collectionView.topAnchor.constraint(equalTo: self.topAnchor),
                             collectionView.rightAnchor.constraint(equalTo: rightAnchor, constant: -20),
                             collectionView.heightAnchor.constraint(equalTo: self.heightAnchor)])

【讨论】:

以上是关于以编程方式添加时,rightAnchor 约束不适用 - swift的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式添加前导/顶部约束

以编程方式添加约束会导致崩溃

以编程方式添加控制器视图时自定义自动布局约束被破坏

单击手势不适用于以编程方式添加的子视图

以编程方式将视图添加到垂直堆栈视图打破了垂直堆栈视图的约束

如何以编程方式向 xib 添加约束