1

我正在尝试向我的菜单项(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){}];
4

1 回答 1

3

我不确定您到底要做什么,但是您需要在动画块上方添加 [self.view layoutSubviews] 行。在您制作动画之前,主视图需要在其起始位置布局您的新视图。

如果您希望 2 个视图彼此重叠且没有空间,您还需要删除“V:[messageView(200)]-[messageViewMenu]”中的破折号。

于 2013-02-04T15:49:25.240 回答