Swift:如何将容器视图正确地定位在父视图的底部?(或者:除了容器视图,还有其他选项吗?)



我还是swift的新手,我想做的是将容器视图定位在父视图的下底部(部分内容最初将在视图之外)。然后,当用户触摸按钮时,容器将被设置动画并向上移动,以便显示所有内容。

动画效果很好,但定位对我来说很困难。以下是我迄今为止所做的:

@IBOutlet var testView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
testView.frame.size = CGSize(width: view.bounds.width, height: 400)
testView.layer.position = CGPoint(x: view.frame.midX, y: view.frame.maxY + 90)
view.addSubview(testView)
}

因此,我已经将容器视图设置为超视图的宽度和固定大小400。我试着把它放在屏幕底部的中心,这样它的一部分就显示出来了,另一部分就在屏幕外面。

这是动画部分:

@IBAction func showMoreButton(_ sender: UIButton) {
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0, options: [], animations: {self.testView.transform = CGAffineTransform(translationX: 0, y: -190)
}, completion: nil)

所以这里我只是把容器190向上移动。容器底部有一个关闭按钮,该按钮未显示(仍在超级视图之外)。

我很确定问题是如何将视图直接定位在view.frame.maxY+90(从而显示90个像素)相对于其高度的位置。当我降低视图高度时,容器的原始位置会越来越向下移动,很明显,在动画之后,一切都会显示出来,但它太小了。由于UIKit中的原点在左上角0,0,我现在知道如何将视图定位在超级视图的底部,以便显示大约90个像素,并且当动画完成时,所有视图都向上移动,现在显示在超级视图中。

我怎么能这么做?

据我所知,您想要的视图顶部只有一个可见的引导按钮。点击按钮后,视图应该向上滑动并显示其全部内容。

您只需要操纵内容图幅的Y偏移即可。

let contentHeight = CGFloat(250) // Full content height
let contentOffset = CGFloat(40) // Offset for the lead button
func displayBottomView(offset: CGFloat) {
redContentView.frame = CGRect(x: 0, y: view.frame.size.height-offset, width: view.frame.size.width, height: contentHeight)
}

这就是您应该如何配置视图控制器。

override func viewDidLoad() {
super.viewDidLoad()
// Set the initial position to show only a button
displayBottomView(offset: contentOffset) 
}
@IBAction func redButtonDidTap(_ sender: UIButton) {
UIView.animate(withDuration: 0.5) {
// Animate displaying of the full content
self.displayBottomView(offset: self.contentHeight)
}
}

这个方法会起作用,但它不是一个很好的布局操作方法。我真的建议你改用自动布局的方法。

相关内容

最新更新