gpt4 book ai didi

ios - 以编程方式更改约束仅影响 View 的可见部分

转载 作者:行者123 更新时间:2023-11-30 14:12:24 25 4
gpt4 key购买 nike

我在 Interface Builder 中构建了一个带有静态单元格的 TableView,并具有两组约束。一种用于编辑 View ,一种仅用于查看。只是改变三个文本框的位置并不多。

第一组约束在界面构建器中激活,第二组约束被停用(未选中“已安装”)。

然后,当用户首先单击“编辑”时,旧约束将被停用,其他约束将被激活:

@IBOutlet var nonEditableConstraints: [NSLayoutConstraint]!
@IBOutlet var editableConstraints: [NSLayoutConstraint]!

override func setEditing(editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)

view.layoutIfNeeded()

if (animated) {
UIView.animateWithDuration(1.0) { () -> Void in
self.setControlsEditing(editing)
self.setContraintsEditing(editing)
self.view.layoutIfNeeded()
}
} else {
setControlsEditing(editing)
setContraintsEditing(editing)
}
}

private func setContraintsEditing(editing: Bool) {
// we need to make sure to deakcivate constraints before activating new ones
if (editing) {
for constraint in nonEditableConstraints {
constraint.active = false
}

for constraint in editableConstraints {
constraint.active = true
}
} else {
for constraint in editableConstraints {
constraint.active = false
}

for constraint in nonEditableConstraints {
constraint.active = true
}
}
}

这个效果很好。唯一的事情是,每当三个“宏观营养”字段中受约束变化的一部分在约束改变时不可见时,它们就会保持在默认状态(由IB设置的状态)。当 iPhone 处于横向模式时会发生这种情况。几个例子:

这是默认模式下的样子(由 IB 设置): enter image description here

当我在所有三个文本框均可见(正确布局)时按“编辑”: enter image description here

这就是当我在向下滚动之前按下编辑键时它在横向中的样子(碳水化合物不可见)。当我按完成并再次编辑时,一切都是正确的,因为所有文本框都是可见的: enter image description here

最佳答案

我自己解决了。显然,您应该只更改 View Controller 的 viewDidLayoutSubviews() 方法中的约束。我以这种有效的方式更改了代码:

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
setContraintsEditing(editing)
}

override func setEditing(editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)

if (animated) {
view.layoutIfNeeded()
UIView.animateWithDuration(1.0) { () -> Void in
self.setControlsEditing(editing)
self.view.layoutIfNeeded()
}
} else {
setControlsEditing(editing)
}
}

如您所见,setContraintsEditing(bool) 方法现在从正确的位置调用,该方法由动画 block 通过layoutIfNeeded() 间接调用。

关于ios - 以编程方式更改约束仅影响 View 的可见部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31629269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com