自动布局动画保持 UILabel 居中

Posted

技术标签:

【中文标题】自动布局动画保持 UILabel 居中【英文标题】:Autolayout Animation Keeping UILabel Centered 【发布时间】:2013-10-28 19:22:15 【问题描述】:

我正在编写一个 ios 7 应用程序,我有一个带有标签的矩形。标签居中对齐,并被创建为与视图相同的大小(为了增加大小时的简单性)。

所需的效果是单击时将视图设置为完整大小,并且标签始终居中。

我目前已经尝试过:

将标签的顶部、左侧、底部和右侧约束设置为 0 将标签的高度和宽度设置为初始大小的视图,并将其与视图动画一起设置为完整大小 将标签的顶部和左侧约束设置为 0 并将动画尺寸设置为完整尺寸

这些都不会产生所需的输出。每次标签似乎只是在视图开始动画之前捕捉到其最终大小。

这是我的代码:

_viewHeightConstraint.constant = self.view.frame.size.height;
_viewWidthConstraint.constant = self.view.frame.size.width;
_viewTopConstraint.constant = 0;
_viewLeftConstraint.constant = 0;

_labelWidthConstraint.constant = self.view.frame.size.width;
_labelHeightConstraint.constant = self.view.frame.size.height;
[self.view needsUpdateConstraints];

[UIView animateWithDuration:1.5f
                 animations:^(void) 
                     [self.myView layoutIfNeeded]; //perform relayout of view containing label before relayout of entire view
                     [self.view layoutIfNeeded];
                 ];

我不确定我是否提供了所有必要的东西,因为我还是自动布局的新手。但是,所需的效果是在中心的标签保持居中的同时动画到全尺寸的视图。

【问题讨论】:

【参考方案1】:

将这些约束添加到您的标签中:

(UIViewAutoresizingFlexibleLeftMargin   | 
 UIViewAutoresizingFlexibleRightMargin  | 
 UIViewAutoresizingFlexibleTopMargin    | 
 UIViewAutoresizingFlexibleBottomMargin)

【讨论】:

除了我已经添加的内容之外?他们需要修饰符吗? 只需将代码中的标签约束替换为_myLabel.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin; 这不起作用。按照您的建议删除我的标签约束时,标签不再具有设定的高度和宽度,因此它变小并停留在左上角。 尝试在你的上面添加这些。【参考方案2】:

为什么叫 needsUpdateConstraints?

所有的变化都发生在那里。只需致电:

...
_labelWidthConstraint.constant = self.view.frame.size.width;
_labelHeightConstraint.constant = self.view.frame.size.height;

 [UIView animateWithDuration:1.5f
             animations:^(void) 
                 [self.view layoutIfNeeded];
 ];

附带说明,为什么要在标签上设置高度和宽度限制?您可以只添加中心水平和垂直约束。我认为您不能为标签设置垂直文本对齐方式。但这不是你最初的问题。

【讨论】:

以上是关于自动布局动画保持 UILabel 居中的主要内容,如果未能解决你的问题,请参考以下文章

*只有一个*动画块(UILabel)使用自动布局的问题

如何使用自动布局约束为移动 UILabel 设置动画?

UILabel尺寸更改不会使用自动布局设置动画

如何使用自动布局移动标签并为更改设置动画?

使用自动布局动画 UIView 动画 UITableView 复选标记

使用自动布局 Xcode 居中