我正在尝试向我的菜单项(messageViewMenu)添加一个视图(messageView),以便当点击菜单项时,这个新视图会添加到它的正上方,并且它们都一个接一个地向下滑动屏幕 - Evernote 5.1 .2 有类似的东西。
我正在使用 NSLayoutConstraint 将新视图附加到我认为是菜单项的顶部。然后,我将菜单项的现有垂直约束设置为标题 UIView (_headerMessageConstraint) 以增长到 300 大小。我希望新视图的后缘垂直附加到菜单项的前缘,并且它们在屏幕上向下滑动一起。
但是,新视图会随着菜单项向下滑动,然后在其后面继续滑动,直到看起来顶部边缘对齐。
谁能告诉我哪里出错了?在此先感谢您的帮助
史蒂夫
编辑。自从我发布这篇文章以来,我了解到当我添加新视图(MessageViewController 的 mvc.view)时,它默认放置在 0,0。我不希望它在 0,0,所以似乎我必须在我希望它出现的位置为它设置一个框架 - 使用自动布局时这似乎是错误的 - 或者将此新视图添加到子视图并为子视图的高度设置动画,也许......虽然我可能会在这里谈论自己进入一个黑暗的地方。
MessageViewController *mvc = [[MessageViewController alloc] init];
[mvc.view setTranslatesAutoresizingMaskIntoConstraints:NO];
UIView *messageView = mvc.view;
[self.view addSubview:messageView];
UIView *messageViewMenu = self.messageViewMenu;
NSDictionary* views = NSDictionaryOfVariableBindings(messageViewMenu, messageView);
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[messageView]|"
options:0
metrics:nil
views:views]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[messageView(200)]-[messageViewMenu]"
options:0
metrics:nil
views:views]];
[self.view layoutSubviews]; // UPDATE - THIS IS THE CODE THAT WAS MISSING - IT DISPLAYS THE SUBVIEWS BEFORE THE ANIMATION STARTS. THANKS @RDELMAR
[UIView animateWithDuration:0.9 animations:^{
_headerMessageConstraint.constant = 200;
[self.view layoutIfNeeded];
} completion:^(BOOL finished){}];