为标签设置布局常数后,它停止工作

时间:2018-11-27 17:50:05

标签: swift autolayout

我有一个表格视图,其中有height和2个单元格的automaticDimension。 一个单元格具有一个“读取更多”按钮,该按钮可更新标签的布局约束常数(如IBOutlet)。它可以正常工作,并且单元格高度根据标签高度而更新,但是当我第一次尝试在cellForRowAt方法委托上更新布局约束时,它可以工作,但是此后,它会从“读取更多”按钮停止工作(并且布局约束出口不起作用)不会变成零)。

    if cellType == .movie {
        let movieCell = cell as! MovieDescriptionCell
        movieCell.updateCellWith(movie: selectedMovie!)
        movieCell.infoLabelHeight.constant = 200. ***(here is the problem, if I don't have this the read more button works)***
        movieCell.readMorePressedBlock = { [weak self] (tag) in
            guard let strongSelf = self else { return }
            DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(70), execute: {
                strongSelf.tableView.reloadData()
            })
        }
    } 


@IBOutlet var infoLabelHeight: NSLayoutConstraint!


  @IBAction func onReadMoreButton(button: UIButton) {
    self.readMoreState = !self.readMoreState
    setReadMoreImageFor(state: readMoreState)

    let infoText = self.infoLabel.text
    let expectedHeight = infoText?.height(withConstrainedWidth: infoLabelWidth.constant, font: self.infoTextFont) ?? self.infoDefaultHeight

    self.infoLabelHeight.constant = self.readMoreState ? expectedHeight : self.infoDefaultHeight

    readMorePressedBlock?(button.tag)
}

我该如何进行这项工作?如果我删除“ movieCell.infoLabelHeight.constant = 200”行,则“阅读更多”按钮将起作用,但是我也需要在开始时设置常量。

谢谢。

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,如果我在awakeFromNib方法中设置布局约束,则read more按钮可以正常工作(可以再次更改约束)

override func awakeFromNib() {
    super.awakeFromNib()

    self.infoLabelHeight.constant = 200
}