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

动画[复制]后自动布局约束不起作用

穆毅然
2023-03-14

我是AutoLayout的新手。我已经知道很多关于这个autoLayout的问题和教程,但是我还没有找到我的解决方案。所以提前感谢您的任何帮助。

我的要求是什么?

我必须制作UIView,它将在按下屏幕底部带有动画的按钮后出现在屏幕上。(如键盘)。我使用autoLayout在xib文件中创建了此UIView。到目前为止,我已经这样做了。

在ViewDidLoad中:

//Loading custom UIView 
containerView = [[SharingPickerView alloc] init];
[containerView loadingMenus:pickerData];
[self.view addSubview:containerView];

在这个视图中,它包含(滚动视图,页面控制器,取消按钮)

在视图WillLayoutSubViews中:

-(void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];

//Changing the frame of view to bottom side of the screen so that we can animate it later from bottom to top later.

containerView.frame = CGRectMake(0, self.view.frame.size.height, self.view.frame.size.width, containerView.frame.size.height);
[containerView setBackgroundColor:[[UIColor colorWithRed:231.0/255.0f green:231.0/255.0f blue:231.0/255.0f alpha:1.0f] colorWithAlphaComponent:0.3]];
}

现在按动画。

-(void)sharePickerView{
   [UIView animateWithDuration:1 animations:^(){
   containerView.frame = CGRectMake(0,self.view.frame.size.height-containerView.frame.size.height, self.view.frame.size.width, containerView.frame.size.width);
   } completion:^(BOOL isFinished){
  NSLog(@"Animation Finish");
   }];
}

在这里,我重新构建了显示动画的视图,但一些底部部分(该视图的取消按钮)没有显示在iPhone 6模拟器中,但它完美地显示了iPhone 5s设备。

问候埃蒙。

共有3个答案

萧浩漫
2023-03-14

https://stackoverflow.com/a/26040569/2654425这个答案可能非常有用,因为它处理了类似的情况。

齐朝明
2023-03-14

如果您使用的是NSAutoLayout,则不应重新构建。

  1. 您必须使用滚动和视图父项在屏幕底部安装一个约束。请记住,在实例化自定义视图时,请将translatesautorexingmaskintoconstraints设置为NO

当你需要改变动画

_ctScrollBottom.constant = self.view.frame.size.height-containerView.frame.size.height;

[UIView animateWithDuration:animationDuration
                 animations:^(){
                     [self.view  layoutIfNeeded];
                 }];

我接受了您的“y”位置计算,但尚未对其进行测试;)

希望这有帮助!

伍胡媚
2023-03-14

尝试使用大小约束作为出口。然后您可以轻松更改这些约束的值。使用自动布局时,不建议修改框架。

声明属性:

@property (strong, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint;

并在实施中:

heightConstraint = self.view.frame.size.height;

此外,这篇文章可能会有所帮助:自动布局、约束和动画

 类似资料:
  • 我在学习教程中的动画自动布局 http://weblog.invasivecode.com/post/42362079291/auto-layout-and-core-animation-auto-layout-was 一切都很顺利。 当我尝试在我的应用程序中使用这个概念,尝试从下到上设置设置屏幕(UIView)的动画时,当设置屏幕只是一个空的UIView时,效果非常好, 但如果我将UILabel

  • 我有两个组件和。每个组件都是由<code>ConstraintLayout</code>创建的。现在,我从上面的组件创建<code>WelcomeScreen</code>。 用例1:使用静态< code>ConstraintLayout(在< code>ConstraintLayout内的< code>ConstraintLayout) 结果:布局预览不显示任何内容 用例2:<代码>Welcom

  • 下面的函数只是将视图移动到一个新位置。它不显示动画:

  • 我注意到在iOS10 Beta 5(即将尝试Beta 6)中,AutoLayout约束动画的行为有点不同。 例如,此方法的工作原理与以前的iOS版本不同: 。。。在我的测试中,最初用添加约束(addConstraints)添加的约束也将在iOS 10中用UIView(UIView)来设置动画(animateWithDuration)(block)。。。到目前为止,这导致了一些古怪/不受欢迎的行为。

  • 许多有关自动布局约束动画的教程建议更新约束的常量属性,然后在动画块中调用。 我的处境有点棘手。我有一个包含3个子视图的视图。此超级视图的高度不是固定的-它是按其子视图的高度之和计算的。在某些情况下,我要求这3个子视图中的一个子视图切换其高度(它在0和30之间变化,即我希望平滑地隐藏和显示它)。代码类似于此: 不幸的是,这并不像我预期的那样有效。我可以看到子视图高度的平滑变化,但在为子视图高度约束设

  • 我有一组AL约束来定位一个子vc,它有两个位置,展开和折叠。 我发现,当我添加折叠约束时,带有常量的上锚到下锚约束,当第一次创建vc时,当我激活它时,似乎有额外的间距。似乎是因为当时没有实际的高度。 当我在viewDidLayoutSubviews中添加约束时,额外的间距消失了,约束行为正常。除了现在在动画中的约束之间切换时,切换到展开约束和约束打断时,无法停用折叠的约束。可能是因为在整个过渡动画