自动布局xcode后更改视图并将其更改为原始视图

时间:2016-06-07 11:56:25

标签: ios xcode swift uiviewanimation

我在故事板中有这个观点:

enter image description here

当我按下按钮时,视图需要设置动画。我想要的是占位符1消失的文本框。带占位符2的文本框必须浮动到第一个文本框的位置,并且视图(绿色背景)必须具有不同的高度。之后,需要在此视图中进行更改。

我有这段代码:

import UIKit

class ViewController : UIViewController, UISearchBarDelegate {

    @IBOutlet weak var heightView: NSLayoutConstraint!
    @IBOutlet weak var tlabel: UILabel!
    @IBOutlet weak var mview: UIView!
    @IBOutlet weak var t2: UITextField!

    @IBOutlet weak var t1: UITextField!
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func test(sender: AnyObject) {
        self.mview.translatesAutoresizingMaskIntoConstraints = false;
        self.t2.translatesAutoresizingMaskIntoConstraints = false;

        UIView.animateWithDuration(0.5, animations: {
            self.mview.frame = CGRectMake(0, 0, 320, 80);

self.t2.frame = CGRect(x: 20, y: 0, width: 10, height: 80);
            })

            self.t1.hidden = true
    }
}

t1是第一个文本框,t2是第二个文本框。 mview是绿色背景的视图。

enter image description here

这是我按下按钮后得到的结果。

文本框必须更多地显示在顶部。我怎样才能做到这一点?有没有办法回到故事板中的原始视图?

我想要的是:当用户点击文本框时,必须触发动画,他们可以在绿色区域下键入并获取相关的搜索结果。当用户在表格中选择一行时,它必须返回到故事板中的视图并填写所选值。

**Found the solution:**
import UIKit

class ViewController : UIViewController, UISearchBarDelegate {
    var c1 : CGFloat = 0;
    var c2 : CGFloat = 0;

    @IBOutlet weak var mview: UIView!
    @IBOutlet weak var t1: UITextField!
    @IBOutlet weak var t2: UITextField!


    @IBOutlet weak var vcc: NSLayoutConstraint!
    @IBOutlet weak var jj: NSLayoutConstraint!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func test(sender: AnyObject) {
        c1 = self.jj.constant;
        c2 = self.vcc.constant

        self.jj.constant = 0;
        self.vcc.constant = 80
    }

    @IBAction func original(sender: AnyObject) {
         self.vcc.constant = c2
        self.jj.constant = c1

    }
}

1 个答案:

答案 0 :(得分:1)

这是我的建议:

  1. 从mview中删除高度约束(绿色视图)
  2. 将高度约束添加到t1
  3. 在t1和t2之间添加垂直距离约束
  4. 添加垂直约束t2的底部和mview'底部
  5. 然后

    @IBAction func test(sender: AnyObject) {
        self.t1.heightConstraint.constant = 0
        self.view.setNeedsLayout()
        UIView.animateWithDuration(0.5, animations: {
            self.view.layoutIfNeeded()
        })
    }
    

    如果您想返回原点视图,请更改self.t1.heightConstraint.constant

    的值

    希望它有用