这是我的tableview行/单元格:
设置了约束 - 图像视图位于标签下方,按钮位于图像视图下方。
这是我的代码:
if(row == 1) {
imageview.hidden = false
} else {
imageview.hidden = true
//how can i change the button constraint from below imageview to below label?
答案 0 :(得分:1)
你可以尝试使用StackView,当你告诉隐藏的东西时,imageView的堆栈视图会调整StackView,好像imageView从来不是视图的一部分,这是一个简单的工作,不必担心约束。
答案 1 :(得分:1)
添加和删除约束是非常糟糕的例子。我会让你的用户界面更复杂。
解决这些自动布局问题的最佳方法是添加两个约束。一个从imageView
到button
,第二个从imageView
到label
。
现在,在设置这些约束后,您需要设置其priority
级别。所以,假设button
首先低于imageView
。在这种情况下,您需要将imageView设置为按钮约束的优先级为750或UILayoutPriorityDefaultHigh
,并将按钮约束的优先级标记为250或UILayoutPriorityDefaultLow
。
让我们开始创建自定义UITableViewCell
class YourTableViewCell: UITableViewCell {
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var label: UILabel!
@IBOutlet weak var button: UIButton!
@IBOutlet weak var buttonToLabelConstraint: NSLayoutConstraint!
@IBOutlet weak var buttonToImageViewConstraint: NSLayoutConstraint!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
func shouldHideImageView(hidden: Bool) {
if(hidden == false) {
buttonToLabelConstraint.priority = UILayoutPriorityDefaultLow
buttonToImageViewConstraint.priority = UILayoutPriorityDefaultHigh
imageView.hidden = true
} else {
buttonToLabelConstraint.priority = UILayoutPriorityDefaultHigh
buttonToImageViewConstraint.priority = UILayoutPriorityDefaultLow
imageView.hidden = false
}
self.contentView.layoutIfNeeded()
}
}
之后,在放置tableView的类中实现类似的逻辑:
if(row == 1) {
cell.shouldHideImageView(true)
} else {
cell.shouldHideImageView(false)
}
你应该全力以赴。
答案 2 :(得分:0)
您可以在约束上创建IBOutlet
,然后只需更改此值:
buttonConstraint.constant = newValue
但我建议您为此创建一个tableView
。在这种情况下,我认为你的代码和逻辑会更准确。
答案 3 :(得分:0)
你可以这样而不是隐藏。
答案 4 :(得分:0)
我看到了几个选项。第一个更容易实现,但如果您决定稍后更改布局,则会稍微灵活一些。
使按钮的约束位于标签下方。保持对此约束的引用(您可以通过故事板将其连接到您的代码,就像使用按钮本身一样,如果您使用的是故事板)。当imageView可见时,设置myConstraint.constant += myImageView.frame.height
。隐藏imageView时,请设置myConstraint.constant -= myImageView.frame.height
。然后,请致电view.setNeedsLayout
以更新您的约束。
制作两个约束:一个用于图像下方,另一个用于标签下方(“constraintToImage”和“constraintToLabel”)。将它们连接到控制器,如选项1中所示,并在图像变得可见时调用view.addConstraint(constraintToImage)
和view.removeConstraint(constraintToLabel)
(与隐藏时相反)。再次,请在{。
view.setNeedsLayout
醇>