【发布时间】:2020-10-04 04:32:35
【问题描述】:
我正在尝试为一个简单的自动布局约束更改设置动画,但是当我第一次调用它时它会设置动画,而不是仅仅拉伸和更改高度,它会向上移动整个视图,如果我再次调用它,它会自行修复.
这是我设置约束的方式:
hiddenView.addSubview(topView)
topView.translatesAutoresizingMaskIntoConstraints = false
topView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
topView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
topView.bottomAnchor.constraint(equalTo: hiddenView.bottomAnchor).isActive = true
topViewDefaultTopAnchorConstraints.append(topView.topAnchor.constraint(equalTo: hiddenView.centerYAnchor))
topViewSelectedTopAnchorConstraints.append(topView.topAnchor.constraint(equalTo: hiddenView.topAnchor))
NSLayoutConstraint.activate(topViewDefaultTopAnchorConstraints)
这是我更新它们的方式:
func showTopView() {
NSLayoutConstraint.deactivate(topViewDefaultTopAnchorConstraints)
NSLayoutConstraint.activate(topViewSelectedTopAnchorConstraints)
UIView.animate(withDuration: 0.25) {
self.view.layoutIfNeeded()
}
}
更新:
这是调用 showTopView 时发生的情况的 gif 图像,再次调用它会修复底部约束:
它应该只是像第二张图片那样动画,而不是把整个视图都向上,因为 bottomAnchor 没有改变,我该如何解决这个问题?
更新:我意识到我正在圆角 topView 和 bottomView,如果我不圆角,那么它可以正常工作,所以它与此有关。
override func viewDidLayoutSubviews() {
topView.roundCorners(corners: [.topLeft, .topRight], radius: 100*ScreenDimensions.ASPECT_RATIO_RESPECT_OF_XMAX)
bottomView.roundCorners(corners: [.topLeft, .topRight], radius: 100*ScreenDimensions.ASPECT_RATIO_RESPECT_OF_XMAX)
topConstraint = topView.topAnchor.constraint(equalTo: hiddenView.topAnchor, constant: hiddenView.frame.height/2)
topConstraint.isActive = true
}
【问题讨论】:
-
您确定您的图片可以像图片 2 中那样拉伸吗?
标签: swift xcode uiview autolayout constraints