Swift:如何在父视图的底部正确放置容器视图? (或者:是否有另一种选择,而不是容器视图?)

Swift:如何在父视图的底部正确放置容器视图? (或者:是否有另一种选择,而不是容器视图?)

问题描述:

我还是新来的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) 
    } 
} 

这人会工作,但它不是布局操纵一个不错的办法。我真的建议你切换到自动布局方式。