更新视图的框架保持约束

Update view's frame keeping constraints

简单的说,看下面的图片:

  1. 我设计了一个view,把constraint放在top left right bottom。更改视图方向时它可以正常工作。

  1. 放一个简单的代码来改变视图高度:

    //代码

    -(BOOL)textFieldShouldReturn:(UITextField *)textField
    {
       self.view.translatesAutoresizingMaskIntoConstraints = NO;
    
       CGRect updateViewFrame = self.updatingView.frame;
       updateViewFrame.size.height = textField.text.floatValue;
       self.updatingView.frame = updateViewFrame;
    
       [self.view setNeedsLayout];
    
       return YES;
     }
    

???为什么SO中的代码格式乱七八糟?

我应该如何在代码中使 UITextfield 与视图的高度一起向上移动,而不直接更改 textField 的框架?更改视图的框架后,我的自动布局约束不再起作用。

其他注意事项: 1. containerView是scrollView,不用担心长高。 2. 我问是否有一种无需直接更改 UITextField 的框架即可工作的方法,因为稍后我将添加更多视图和控件。如果我必须为每个控件更新框架,可能会造成混乱:(

如果您想在 Interface Builder 中创建自动布局约束,您可以为它们创建 IBOutlets,方法与视图、按钮等相同。然后您可以更改此类约束的常量和 animate/refresh 观点:

@interface ViewController ()

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *topSpace;

@end

@implementation ViewController

- (void)someMethod {

    self.topSpace.constant = 60;

    [UIView animateWithDuration:1 animations:^{
        [self.view layoutSubviews]; //just this line if you don't want the animation
    }];

}

@end

手动设置框架会破坏所有链接到该视图的约束。