【问题标题】:Change view and change it the the original later after autolayout xcode在 autolayout xcode 之后更改视图并将其更改为原始视图
【发布时间】:2016-06-07 11:56:25
【问题描述】:

我的故事板中有这个视图:

当我按下按钮时,视图需要动画。我想要的是带有占位符 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 是绿色背景的视图。

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

文本框必须更靠前。我怎样才能做到这一点?有没有办法回到我的故事板中的原始视图?

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

**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

    }
}

【问题讨论】:

  • 试试t2.frame = t1.frameself.mview.frame.size.height = t2.frame.origin.y + t2.frame.size.height + 10(填充)
  • @SunilSharma 谢谢,它几乎可以工作了。但是我的第二个文本框由文本框 1(隐藏的文本框)更改。你知道如何改变这种情况吗?
  • 您的意思是如何再次显示文本框 1 和 2? t1.frame = t2.framet2.frame.origin.y = t1.frame.origin.y + t1.frame.size.height + 10self.myview.frame.size.height = t2.frame.origin.y + t2.frame.size.height + 10

标签: ios xcode swift uiviewanimation


【解决方案1】:

这是我的建议:

  1. 从 mview 中移除高度限制(绿色视图)
  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的值

希望对你有帮助

【讨论】:

  • 也许 self.view.setNeedsLayout() 不是必需的
  • 非常感谢!它几乎可以工作,解决方案对我来说非常清楚。我希望 t2 稍微移到顶部。约束条件也可以吗?因为 t2 不在 t1 的位置上,而且标题稍微移到了下方。
  • 解决了。谢谢!
猜你喜欢
  • 2013-09-26
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
相关资源
最近更新 更多