iOS - 运行时更改约束仅在第一次起作用

标签 ios swift constraints

我有这段代码,基于元素可见性的改变约束:

if (self.collectionView.isHidden){
     controller.view.bottomAnchor.constraint(equalTo: self.collectionView.topAnchor).isActive = false
     controller.view.bottomAnchor.constraint(equalTo: self.view2.topAnchor).isActive = true
}
else {
     controller.view.bottomAnchor.constraint(equalTo: self.collectionView.topAnchor).isActive = true
     controller.view.bottomAnchor.constraint(equalTo: self.view2.topAnchor).isActive = false
}

如果我在 collectionView.isHidden 之后执行此操作设置为真,它有效。但是,在我设置 collectionView.isHidden = true 之后并调用此代码,它不再有效并且 controller.view仍然附加到 view2 的顶部。 collectionView 也有一个高度限制。 ant ist 值为 50。

我也试过手动设置 collectionView.frame.size.height = 50 (或其他一些默认值)因为没有这个,高度为 collectionView.frame.size.height为零。但不起作用。我试过打电话collectionView.updateConstraints() , 但它也没有效果。

最佳答案

因此,我认为您每次调用该函数时都设置了一个新的约束条件,您并没有真正删除之前的约束条件。

通常,当我需要这种逻辑时,我会保留对约束的引用,以便稍后激活/停用它,如下所示:

var controllerBottomAnchor: NSLayoutConstraint?

然后我这样赋值:

controllerBottomAnchor = controller.view.bottomAnchor.constraint(equalTo: self.collectionView.topAnchor)
controllerBottomAnchor?.isActive = true

一旦我需要更改它,我只需使用引用:

controllerBottomAnchor?.isActive = false

我通常将它用于宽度和高度 anchor 。

关于iOS - 运行时更改约束仅在第一次起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44851764/

相关文章:

ios - 在 UITextField 中的字符后添加空格

iphone - SKAction 未按预期工作

sql - 如何一次性从 PostgreSQL 表中删除所有 NOT NULL 约束

ios - 按下按钮时显示新的 SwiftUI View

constraints - 如何在为容器 UIView 设置动画时缩放容器 UIView 的 subview 的布局/大小?

ios - constraintsWithVisualFormat 可以与动态生成的 View 一起使用吗?

ios - UISegmentedControl 仅在设备上显示第一项,但在模拟器中有效

ios - 使用主体参数进行 API 调用

iOS 8.2 Swift Google 登录按钮文本不出现

database - CoreData 迁移新属性 Swift