如何在autolayout中更改self.view约束?

时间:2014-12-09 12:44:38

标签: ios autolayout

我想以编程方式移动self.view的y位置(顶部约束)。但我无法找到可以改变运行时间的任何约束

    self.view.frame = CGRectMake(0, -59, self.view.frame,size.width, self.view.frame,size.height);

这样的东西但有约束力?

2 个答案:

答案 0 :(得分:1)

您永远不应移动视图控制器的视图。设置视图的框架是superview的责任。对于视图控制器,这意味着定位self.view是周围视图控制器的责任(例如UINavigationController)。

相反,当尝试移动内容以使键盘不隐藏任何内容时,您应该将视图中的内容移动到正确的位置。但是,请记住,从iOS8和自定义键盘开始,键盘几乎可以具有任何高度,因此您永远无法保证所有子视图在屏幕上都可见。大多数情况下 - 可能有例外 - 这是一种更好的方法来移动UIScrollView内的文本字段并更改滚动视图的contentOffset以便当前的第一响应者(文本)当前正在编辑的字段是可见的。

答案 1 :(得分:1)

获取新的UIView并在新的UIView中添加textfield。在主视图(UIView)中添加新的self.view。为新Constraint添加UIView

现在您可以通过编程方式更改新的UIView constraint

    IBOutlet NSLayoutConstraint * topConstraint;

    NSArray * arrConstarint=self.view.constraints;
    for (NSLayoutConstraint * constraint in arrConstarint)
    {
        if (constraint.firstAttribute==NSLayoutAttributeTop) {
            // if problem then add constraint.firstItem or constraint.secondAttribute etc
            constraint.constant=-59;
        }
    }