1

我正在编写一个 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];
                 }];

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

4

2 回答 2

0

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

(UIViewAutoresizingFlexibleLeftMargin   | 
 UIViewAutoresizingFlexibleRightMargin  | 
 UIViewAutoresizingFlexibleTopMargin    | 
 UIViewAutoresizingFlexibleBottomMargin)
于 2013-10-28T19:27:30.447 回答
0

为什么称需求更新约束?

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

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

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

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

于 2013-10-28T23:00:30.463 回答