视图的高度在计算时会发生变化吗?

时间:2017-07-15 02:23:21

标签: swift uiview view uibutton nslayoutconstraint

Swift 3

我有一个视图,其中包含一些标签,当用户点按按钮时,我会在视野中制作动画。我在另一个视图控制器中使用了这个相同的代码,它运行得很好。但是出于某些原因,我现在无法让它发挥作用。它始终偏离1.5像素。真的很奇怪。

这是应该发生的事情:场景加载,视图隐藏起来。用户点击"显示详细信息"按钮,视图向下滑入视图。

但是会发生什么:场景加载并隐藏视图。到现在为止还挺好。用户点击“显示详细信息”按钮",按钮不执行任何操作。它只是滑下来的数量可以忽略不计。然后用户再次点击它,最后显示视图。为什么两个水龙头?我不知道。

我让控制台打印出视图的高度,当场景首次加载时,视图的高度为237.0,但是当我点击按钮时,高度变为235.5。为什么?这真让我感到困惑。

以下是代码:

class Step5IncomeSummaryVC: UIViewController {

@IBOutlet weak var detailsView: UIView!
@IBOutlet weak var viewTop: NSLayoutConstraint!
@IBOutlet weak var showDetailsButton: UIButton!


override func viewDidLoad() {
    super.viewDidLoad()

    showDetailsButton.setTitle("show details", for: .normal)
    viewTop.constant = -(detailsView.bounds.height)
    detailsView.isHidden = true
    print("Initial view height: \(detailsView.bounds.height)")          // check height of view BEFORE animation

}


@IBAction func showDetailsButtonTapped(_ sender: UIButton) {
    print("Button pressed view height: \(detailsView.bounds.height)")           // check height of view AFTER button press
    if viewTop.constant == -(detailsView.bounds.height) {
        detailsView.isHidden = false
        showDetailsButton.setTitle("hide details", for: .normal)
        UIView.animate(withDuration: 0.25, animations: { 
            self.viewTop.constant = 0
            self.view.layoutIfNeeded()
        })
        print("After animation view height: \(detailsView.bounds.height)")         // check height of view after animation
    } else {
        UIView.animate(withDuration: 0.25, animations: { 
            self.viewTop.constant = -(self.detailsView.bounds.height)
            self.view.layoutIfNeeded()
        })
        showDetailsButton.setTitle("show details", for: .normal)
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) {
            self.detailsView.isHidden = true
        }
    }
}

0 个答案:

没有答案