0

我在 viewController 中有一个视图,我想在左侧的 viewController 之外启动较小的视图,并在我按下按钮时将其动画到中心。所以我做了这样的:

override func viewDidLayoutSubviews() {

    smallView.center = CGPointMake(smallView.center.x - 400, smallView.center.y)

}

它工作得很好!问题是我在那个较小的视图中有一个文本视图,每次我开始编辑它时它都会跳到它所在的主视图控制器之外,我必须再次按下按钮才能把它带进去. 如何解决这个问题?

PS:当我开始像这样编辑文本视图时,我尝试将其定位到中心:

func textViewDidBeginEditing(textView: UITextView) {

    smallView.center = CGPointMake(smallView.center.x + 400, smallView.center.y)

}

但它不起作用。并且该方法正确连接到textView(委托)

PS2:我的 viewController 中也有 imagePickerController。

4

1 回答 1

0

好的,因为您正在使用自动布局。

Auto Layout 的第一条规则(您将在任何 Auto Layout 书籍中看到这一点)是您绝对不能直接触摸视图的frameor center

// don't do these
myView.frame = CGRectMake(0, 0, 100, 100);

// ever
myView.center = CGPointMake(50, 50);

你可以得到框架和中心,但你永远不能设置框架或中心。

为了使用自动布局移动东西,您需要更新约束。

例如,如果我设置一个名为的视图myView并希望它在高度上增长和缩小,我会做类似的事情......

  1. 将顶部约束设置为 0 处的超级视图。
  2. 将左约束设置为 0 处的超级视图。
  3. 将右约束设置为 0 处的超级视图。
  4. 将高度约束设置为 50(例如)并将其保存在名为heightConstraint.

现在要为高度变化设置动画,我这样做......

self.heightConstraint.constant = 100;

[UIView animateWithDuration:1.0
                 animations:^ {
                     [self.view layoutIfNeeded];
                 }];

然后,这会将高度从 50(我设置它时的位置)设置为 100。

这对于使用自动布局的任何视图动画都是一样的。如果(例如)我保存了左约束,我可以改变它,它会增加和减少从超级视图左边缘到myView.

Ray Wenderlich 网站上有几个关于 AutoLayout 的非常好的教程。我建议你看看他们。

无论您做什么,我都强烈建议您不要只禁用自动布局。如果您不知道如何使用自动布局,那么您将很快落后于 iOS 8 和新的设备尺寸。

于 2014-09-29T16:07:25.900 回答