首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Swift中使用自动布局的代码更改UI布局?

问如何用Swift中使用自动布局的代码更改UI布局?
EN

Stack Overflow用户
提问于 2014-10-27 02:33:19
回答 2查看 160关注 0票数 0

我有一个使用自动布局的登录视图。当我点击用户名文本文件输入一些信息时,视图会弹出键盘,然后键盘会阻塞一些UI。我想改变一些UI的框架信息时,弹出键盘在代码,但由于UI使用自动布局,所以设置UI的框架在代码不工作。

我该如何处理这种情况?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-27 06:25:41

应该将IBOutlet设置为要修改的约束,并在代码中更改其常量属性的值(如果需要,则为动画)。

票数 1
EN

Stack Overflow用户

发布于 2014-10-27 02:51:31

您需要动画一个NSLayoutConstraint的常量值。

所以你创造了这样的一个:

代码语言:javascript
复制
class ViewController: UIViewController {

    var loginBox:UIView?;
    var loginBoxTopConstraint:NSLayoutConstraint?;

    override func viewDidLoad() {

        ...

        self.initConstraints();

    }

    func initConstraints()
    {
        // init constraints here
    }

    ...

}

然后,您就会在下面这样的东西中加入这个约束:

代码语言:javascript
复制
func initConstraints()
{

    ...

    self.loginBoxTopConstraint = NSLayoutConstraint(item: self.loginBox!, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Top, multiplier: 1.0, constant: 150.0);

    self.view.addConstraint(self.loginBoxTopConstraint!);
}

现在,当用户点击一个登录字段时,您的UITextField委托didBeginEditing就会被调用。这是将约束常量值动画化的地方:

代码语言:javascript
复制
func textFieldDidBeginEditing(textField: UITextField) {

    ...        

    self.loginBoxTopConstraint?.constant = 20.0; // was 150 before

    UIView.animateWithDuration(0.5, animations: { () -> Void in

        self.view.layoutIfNeeded();

    });

}

当用户完成输入文本字段时,应该调用textFieldDidEnd委托方法:

代码语言:javascript
复制
func textFieldDidEndEditing(textField: UITextField) {

    ...

    self.loginBoxTopConstraint?.constant = 150.0; // reset to 150

    UIView.animateWithDuration(0.5, animations: { () -> Void in

        self.view.layoutIfNeeded();

    });

}

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26580351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档