我想使用AutoLayout创建带有注释和注释表单的动态视图,根据注释长度动态更改textview的高度。喜欢Instagram:
有一个tableView和一个textView。 我试图添加以下约束
当我指定静态高度时,它会起作用,但当我尝试添加> =< =时,它总是显示错误。
答案 0 :(得分:1)
避免不平等。将superview的底部设置为最后一个视图的底部(您可能必须提升所有子视图'垂直压缩阻力优先级高于父级的... ...说明1000,而父级是在750)。或者我建议的策略,将静态高度设置为任意值。对其适当的视图控制器引用约束。在视图控制器中以编程方式计算适当的高度(只需将所有子视图高度相加)。最后将约束常数设置为计算值。
答案 1 :(得分:0)
如果要在键盘出现时更改视图高度,请尝试以下操作:
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
}
- (void)keyboardWillShow:(NSNotification *)note {
NSDictionary *userInfo = note.userInfo;
NSTimeInterval duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
CGRect keyboardFrameEnd = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
keyboardFrameEnd = [self.view convertRect:keyboardFrameEnd fromView:nil];
[UIView animateWithDuration:duration animations:^{
self.bottomViewConstraint.constant = keyboardFrameEnd.size.height + 10.0;
[self.view setNeedsUpdateConstraints];
[self.view layoutIfNeeded];
}];
}
- (void)keyboardWillHide:(NSNotification *)note {
NSDictionary *userInfo = note.userInfo;
NSTimeInterval duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
CGRect keyboardFrameEnd = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
keyboardFrameEnd = [self.view convertRect:keyboardFrameEnd fromView:nil];
[UIView animateWithDuration:duration animations:^{
self.bottomViewConstraint.constant = 10.0;
[self.view setNeedsUpdateConstraints];
[self.view layoutIfNeeded];
}];
}