我正在尝试将一个视图(messageView)添加到我的菜单项(messageViewMenu)中,这样当点击菜单项时,这个新视图就会被添加到它上面,它们都会一个接一个地向下滑动到屏幕上 - Evernote 5.1.2有类似的东西。
我正在使用NSLayoutConstraint将新视图附加到我认为是菜单项顶部的视图。然后我将菜单项的现有垂直约束设置为标题UIView(_headerMessageConstraint),以增长到300.我希望新视图垂直附加,其后边缘到菜单项的前沿,然后它们向下滑动到屏幕上一起。
但是,新视图会随菜单项向下滑动,然后继续在其后面,直到顶部边缘对齐为止。
谁能告诉我哪里出错了? 在此先感谢您的帮助
史蒂夫
EDIT。自从我发布这个以来,我已经了解到当我添加新视图(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){}];
答案 0 :(得分:3)
我不确定您要做什么,但是您需要在动画块上方添加[self.view layoutSubviews]行。在制作动画之前,主视图需要将新视图布置在其起始位置。
您还需要在" V中取出短划线:[messageView(200)] - [messageViewMenu]"如果你希望2个视图在彼此的顶部没有空间。