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
}
}
}