2016-06-07 64 views
0

我有我的故事板这样的观点:更改视图,自动布局后的xcode改变它原来的后

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 

    } 
} 
+0

尝试't2.frame = t1.frame'和'self.mview .frame.size.height = t2.frame.origin.y + t2.frame.size.height + 10'(padding) –

+0

@SunilSharma谢谢你,它几乎在工作。但我的第二个文本框被更改为文本框1(隐藏文本框)。你知道如何改变这种情况吗? – da1lbi3

+0

你的意思是如何再次显示文本框1和2? 't1.frame = t2.frame'和't2.frame.origin.y = t1.frame.origin.y + t1.frame.size.height + 10'和'self.myview.frame.size.height = t2 .frame.origin.y + t2.frame.size.height + 10' –

回答

1

这是我的建议:从MVIEW

  1. 删除高度约束(绿色视图)
  2. 附加高度约束为t1
  3. 添加t1和t2
  4. 之间的垂直距离约束添加垂直约束t2的底部和mview的底部

然后

@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

值希望它有助于

+0

也许self.view.setNeedsLayout()没有必要 –

+0

非常感谢!它工作得差不多,解决方案对我来说很清楚。我希望t2有点向上移动。这些限制也可以实现吗?因为t2不在t1的位置,并且标题稍微移动一点。 – da1lbi3

+0

解决了它。谢谢! – da1lbi3