我一直坚持这个问题相当长一段时间了。在Objective-C中开发iOS应用程序时,如何在启用Autolayout时以编程方式更改UIViews的位置(位置)?它是如此不容易,因为自动布局我们刚才指定的UIView作为这样一个新的中心:如何以编程方式更改UIViews在Autolayout打开时的位置
UIView.center = CGPointMake(x,y);
然而,以上不再起作用,因为自动布局的。最终,我试图通过使用从左到右的转换转换来为某个UIView设置动画。为了做到这一点,我需要以编程方式移动UIViews,目前我无法做到这一点。下面的是什么,我想基本上是做(但它不会因为自动布局的工作):
_loginTextLabel.center = CGPointMake(1,1);
[UIView animateWithDuration:0.5 delay:0.5 options:nil animations:^{
_loginTextLabel.center= CGPointMake(5, 1);
} completion:nil
];
}
在这篇文章中有几个有趣的想法:http://stackoverflow.com/questions/11368440/can-i-disable-autolayout-for-a-specific-subview-at-runtime一个简单的地方开始,尝试在设置新中心之前设置'translatesAutoresizingMaskIntoConstraints = YES'。 –
@WilliamSmith另外一个问题。为什么当我使用它时,“CGPointMake(_loginTextLabel.bounds.origin.x,_loginTextLabel.bounds.origin.y)”会生成一个(0,0)值?这是不对的。这也是一个自动布局问题? – Vimzy
我猜首先我会问,你为什么认为它错了? bounds属性定义了UIView相对于框架的可绘制区域。它通常默认为(0,0,宽度,高度)。从Apple文档中获得“边界矩形的大小与帧矩形的大小相关联,以便更改一个影响另一个。更改边界大小会相对于其中心点增大或缩小视图。”你可以在这里阅读bounds属性:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instp/UIView/bounds –