gpt4 book ai didi

ios - 添加带有简单动画的 subview 时使用 NSLayoutConstraints

转载 作者:行者123 更新时间:2023-12-01 19:13:42 24 4
gpt4 key购买 nike

我正在尝试向我的菜单项(messageViewMenu)添加一个 View (messageView),以便当点击菜单项时,这个新 View 会添加到它的正上方,并且它们都一个接一个地向下滑动屏幕 - Evernote 5.1 .2 有类似的东西。

我正在使用 NSLayoutConstraint 将新 View 附加到我认为是菜单项的顶部。然后,我将菜单项的现有垂直约束设置为标题 UIView (_headerMessageConstraint) 以增长到 300 大小。我希望新 View 的后缘垂直附加到菜单项的前缘,并且它们在屏幕上向下滑动一起。

但是,新 View 会随着菜单项向下滑动,然后在其后面继续滑动,直到看起来顶部边缘对齐。

谁能告诉我哪里出错了?
在此先感谢您的帮助

史蒂夫

编辑。自从我发布这篇文章以来,我了解到当我添加新 View (MessageViewController 的 mvc.view)时,它默认放置在 0,0。我不希望它在 0,0,所以似乎我必须在我希望它出现的位置为它设置一个框架 - 使用自动布局时这似乎是错误的 - 或者将此新 View 添加到 subview 并为 subview 的高度设置动画,也许......虽然我可能会在这里谈论自己进入一个黑暗的地方。

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){}];

最佳答案

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

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

关于ios - 添加带有简单动画的 subview 时使用 NSLayoutConstraints,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14687343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com