当前位置: 首页 > 知识库问答 >
问题:

在添加具有简单动画的子视图时使用NSLayoutConstraints

太叔逸春
2023-03-14

我正在尝试向我的菜单项(messageViewMenu)添加一个视图(messageView),这样当点击菜单项时,这个新视图就会添加到它的正上方,它们会一个接一个地在屏幕上向下滑动-Evernote 5.1.2有类似的功能。

我使用NSLayoutConstraint将新视图附加到我假定的菜单项顶部。然后,我将菜单项的现有垂直约束设置为标题UIView(\u 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){}];

共有1个答案

赫连实
2023-03-14

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

如果你想让两个视图在没有空间的情况下相互重叠,你还需要在“V:[消息视图(200)]-[消息视图菜单]”中去掉破折号。

 类似资料:
  • 问题内容: 我设计了一个简单的布局,没有动画就完成了设计,但是现在我想在textview click事件时添加动画,但我不知道如何使用它。我的xml设计看起来不错还是不好?任何建议,将不胜感激。 我的XML 我的java 问题答案: 您可以做两件事来添加动画,首先可以让android为您设置布局动画。这样,每次您更改布局中的某些内容(例如更改视图可见性或视图位置)时,android都会自动创建淡入

  • 我正在当前视图底部的UIViewController中添加一个视图作为子视图。我可以使用alpha制作淡入淡出动画,但我想将其显示为类似键盘弹出窗口的幻灯片。 如何设置动画?

  • 我有这样的看法: 我想创建简单而清晰的动画,将alpha(淡入)更改为容器顶部,从最底部(容器)为ImageView滑动。 我在stackoverflow中找到了很多解决方案,当你指定幻灯片的具体高度时。有没有一个从下到上的简单解决方案?

  • 当前为 5.4 版本,稍后将升级到 5.5。在 5.5 中,本节内容被拆分成了多个小节。 使用动画视图 在 Unity 中,动画视图用于预览和编辑游戏对象的动画剪辑。动画视图可以通过菜单 Window -> Animation 打开。 查看游戏对象上的动画 动画视图和层级视图、场景视图以及检视视图紧密耦合。类似于检视视图,动画视图将显示当前选中对象的动画的时间轴和关键帧。你也可以在层级视图或场景视

  • 我设计了一个简单的布局。我已经完成了没有动画的设计,但现在我想在textview单击事件时添加动画,我不知道如何使用它。我的xml设计看起来好不好?如有任何建议,将不胜感激。 我的java

  • 我必须在屏幕上显示一个带有多个“开关”控件iPhone弹出窗口。并分别通过打开/关闭操作在弹出窗口上添加和删除子视图。有关情况的更好说明,请参见下面 就像上面一样,当“添加邮件”开关为“ON”时,弹出视图必须再次增加高度,再添加两个子视图。最后看起来像这样, 就是这样。我正在通过我的应用程序使用自动布局,这是我感到困惑的地方。我知道我可以删除弹出窗口,每次都可以再删除一个新的弹出窗口,但这似乎是新