更新视图的框架保持约束
Update view's frame keeping constraints
简单的说,看下面的图片:
- 我设计了一个view,把constraint放在top left right bottom。更改视图方向时它可以正常工作。
放一个简单的代码来改变视图高度:
//代码
-(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
手动设置框架会破坏所有链接到该视图的约束。
简单的说,看下面的图片:
- 我设计了一个view,把constraint放在top left right bottom。更改视图方向时它可以正常工作。
放一个简单的代码来改变视图高度:
//代码
-(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
手动设置框架会破坏所有链接到该视图的约束。