Xcode-ViewDidLayoutSubView

Xcode-ViewDidLayoutSubView,xcode,view,viewdidlayoutsubviews,Xcode,View,Viewdidlayoutsubviews,我在viewController内有一个视图,我想在左侧的viewController外启动较小的视图,并在按下按钮时将其设置为中心动画。所以我就这样做了: override func viewDidLayoutSubviews() { smallView.center = CGPointMake(smallView.center.x - 400, smallView.center.y) } func textViewDidBeginEditing(textView: UIText

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

override func viewDidLayoutSubviews() {

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

}
func textViewDidBeginEditing(textView: UITextView) {

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

}
而且它工作得很好!,问题是,我在较小的视图中有一个文本视图,每次我开始编辑它时,它都会跳出主viewController原来的位置,我必须再次按下按钮才能将其放入。 如何解决这个问题

PS:当我开始编辑文本视图时,我尝试将其定位到中心,如下所示:

override func viewDidLayoutSubviews() {

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

}
func textViewDidBeginEditing(textView: UITextView) {

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

}
但它不起作用。并且该方法连接到textView PropertyLegate


PS2:我的viewController中还有imagePickerController。

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

自动布局的第一条规则是,你绝对不能直接接触视图的框架或中心

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

// ever
myView.center = CGPointMake(50, 50);
您可以获得框架和中心,但无法设置框架或中心

为了使用自动布局移动对象,您需要更新约束

例如,如果我设置了一个名为myView的视图,并希望它在高度上增长和收缩,我会做如下操作

将superview的顶部约束设置为0。 将左约束设置为0处的superview。 将右约束设置为0处的superview。 例如,将高度约束设置为50,并将其保存在名为heightConstraint的特性中。 现在,为了使高度的变化具有动画效果,我将执行以下操作

self.heightConstraint.constant = 100;

[UIView animateWithDuration:1.0
                 animations:^ {
                     [self.view layoutIfNeeded];
                 }];
这将从我设置为100时的50处设置高度动画

这与使用“自动布局”的任何视图动画相同。例如,如果我保存了左约束,我可以更改它,它将增加或减少从superview左边缘到myView的间隙

上有几个关于自动布局的非常好的教程。我建议你看看


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

您使用的是自动布局吗?是的。它会影响行为吗?如果是,那我现在该怎么办?