我一直堅持這個問題相當長一段時間了。在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 –