我在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。
答案 0 :(得分:0)
好的,因为您正在使用自动布局。
自动布局的第一条规则(您将在任何自动布局书中看到这一点)是您绝对无法直接触摸视图的frame
或center
。
// don't do these
myView.frame = CGRectMake(0, 0, 100, 100);
// ever
myView.center = CGPointMake(50, 50);
你可以获得框架和中心,但你永远不能设置框架或中心。
为了使用自动布局移动内容,您需要更新约束。
例如,如果我设置一个名为myView
的视图并希望它在高度上增长和缩小,我会做类似的事情......
heightConstraint
的属性中。现在为高度变化设置动画我这样做......
self.heightConstraint.constant = 100;
[UIView animateWithDuration:1.0
animations:^ {
[self.view layoutIfNeeded];
}];
然后,这将使高度从50(我设置时的位置)设置为100。
对于使用自动布局的任何视图动画,这都是相同的。如果(例如)我保存了左边约束,我可以改变它,它会增加和减少从超视图左边缘到myView
的间隙。
Ray Wenderlich site上有几个关于AutoLayout的非常好的教程。我建议你看看它们。
无论你做什么,我强烈建议不要只禁用自动布局。如果您不知道如何使用自动布局,那么您将很快落后于iOS 8和新设备尺寸。