自动布局动画保持 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 居中的主要内容,如果未能解决你的问题,请参考以下文章