如何在Swift中设置NSLayoutConstraint?

时间:2018-12-18 19:24:54

标签: swift constraints

我想在不同情况下以芳香方式更改一些约束。

我的约束来自情节提要的声明:

    @IBOutlet weak var topConstraintPostImageView: NSLayoutConstraint!
    @IBOutlet weak var heightConstraint: NSLayoutConstraint!

这是我的代码,我想在其中更改约束:

func updateCellView(post: PostModel) {

    // Wenn Bild mit Text gepostet wird
    if post.imageURL != nil && post.postText != nil {

        topConstraintPostImageView.constant = 10

        // Wenn Text ohne bild gepostet wird
    } else if post.imageURL == nil && post.postText != nil  {

        heightConstraint.constant = 1

        // Wenn Bild ohne Text gepostet wird
    } else if post.imageURL != nil && post.postText == nil {

        topConstraintPostImageView.constant = 0

    }
}

但是约束仍然没有改变。

这是我的cellForRowAt函数:

    extension DiscoveryViewController: UITableViewDataSource {
    // wie viele Zellen
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return postArray.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "DiscoveryCollectionViewCell", for: indexPath) as! DiscoveryCollectionViewCell

        cell.updateCellView(post: postArray[indexPath.row].post!)
        cell.layoutIfNeeded()
        cell.user = postArray[indexPath.row]
        cell.post = postArray[indexPath.row]
        cell.delegate = self

        return cell
    }
}

enter image description here

在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

在vc的cellForRowAt中插入

 cell.updateCellView(arr[indexPath.row])////  change arr to your datasource arr inside here set constants
 cell.layoutIfNeeded()
 return cell

if语句的结尾

答案 1 :(得分:0)

考虑从setNeedsUpdateConstraints()在您的视图上调用updateCellView(),然后实施:

class MyView: UIView {
  // ...
  override func updateConstraints() {
    super.updateConstraints()
    // This is where you update your constraints including the logic above.
  }
  // ...
}

✳️更妙的是,考虑使用UIStackViews安排并单独隐藏或显示要有条件显示的视图。