gpt4 book ai didi

ios - 以编程方式添加约束不尊重优先级

转载 作者:行者123 更新时间:2023-11-28 12:09:58 25 4
gpt4 key购买 nike

下面是一个将 View 添加到父 View 的循环。每个 subview 都是左侧的删除按钮和信息.....它们位于父 View 中...

每个 subview 都被限制在上面的 View 中……顶 View 被限制在父 View 的顶部边缘……所有这些都是通过编程添加的。

删除按钮将一次删除一个

The fine version where I dont add the secondary priority 800 top anchor

一旦我向每个 View 添加次要顶部约束以解决删除问题,我就会得到以下......

enter image description here

var horizontalConstraint1 = NSLayoutConstraint()
var horizontalConstraint2 = NSLayoutConstraint()
var verticalConstraint1 = NSLayoutConstraint()
var verticalConstraintOuter = NSLayoutConstraint()

horizontalConstraint1 = v.leadingAnchor.constraint(equalTo: (v.superview?.leadingAnchor)!,constant:10)
horizontalConstraint2 = v.trailingAnchor.constraint(equalTo: (v.superview?.trailingAnchor)!,constant:-10)
if self.prevView == nil{
verticalConstraint1 = v.topAnchor.constraint(equalTo: (v.superview?.topAnchor)!, constant: 0)
NSLayoutConstraint.activate([horizontalConstraint1,horizontalConstraint2,verticalConstraint1 ])
}else {
if let pv = self.prevView as? UIView {
verticalConstraint1 = v.topAnchor.constraint(equalTo: (pv.bottomAnchor), constant: 10)
verticalConstraintOuter = v.topAnchor.constraint(equalTo: (v.superview?.topAnchor)!,constant:10 )
verticalConstraintOuter.priority = UILayoutPriority(rawValue: 800)
NSLayoutConstraint.activate([horizontalConstraint1,horizontalConstraint2,verticalConstraint1,verticalConstraintOuter])
}
}
self.prevView = v

最佳答案

你的技术是错误的。您不会向每个 View 添加“次要顶部约束以说明删除”。删除 View 时,您会完全删除现有的约束并创建一组全新的约束。

或者,使用 UIStackView,它会为您完成工作:您将排列 View 的 isHidden 设置为 true,然后堆栈 View 重写其排列 View 的约束。

在您的情况下,一种更简单的技术是使您的界面成为 UITableView。现在您所要做的就是删除表格的一行。 “删除此行”的概念基本上内置于 TableView 中;您几乎可以免费获得它(包括删除按钮,尽管没有法律规定您必须使用它)。

关于ios - 以编程方式添加约束不尊重优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48710813/

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