我想關閉一段時間的自動佈局,並使用其bounds
,center
和transformation
來處理UIView的大小和位置。爲什麼不設置UIView的邊界限制其大小
我有一個非常簡單的'Single View Application'示例。我的應用程序擁有一個託管主視圖的視圖控制器。在這種觀點有兩個按鈕,和另一種觀點(與背景設置爲粉紅色),後者又包含一個圖像視圖(設置方面配合):
我蒸餾我的問題成爲一個非常簡單的UIViewController:
@IBOutlet weak var imageHolderView: UIView!
@IBOutlet weak var imageView: UIImageView!
@IBAction func loadImageButtonClicked(sender: AnyObject) {
let url = NSURL(string: "https://c2.staticflickr.com/4/3909/15110089915_21a12eba6a_k.jpg")
let data = NSData(contentsOfURL: url!)
self.imageView.image = UIImage(data: data!)
}
@IBAction func clearConstraintsButtonClicked(sender: AnyObject) {
let bounds:CGRect = self.imageHolderView.bounds
let center:CGPoint = self.imageHolderView.center
NSLayoutConstraint.deactivateConstraints(self.imageHolderView.constraints)
self.imageHolderView.bounds = bounds
self.imageHolderView.center = center
}
NB我試圖在一個更復雜的項目中理解這個,這裏的例子只是爲了演示這個問題。
當我運行的圖像沒有來源,所以粉紅色的UIView(imageHolderView
)如預期佔據了大部分屏幕的項目:
當我點擊加載圖像按鈕控制器負載將圖像從網頁拖入UIImageView。由於限制都還到位自動佈局保證了畫面方面配合在以約束其超視圖imageHolderView
的UIImageView的:
如果我現在明確限制,我希望看到沒有什麼區別因爲由自動佈局設置的約束會立即在代碼中被相同的值替換。但是,這不是我所看到的:
如何搶邊界和一個UIView的中心,通過自動佈局設置,關閉自動佈局了UIView,然後重新建立邊界和中心從我自己的swift代碼?
看在調試器上的UIImageView imageView
上的UIView imageHolderView
是正確的界限,約束幾乎是(*)仍然存在(這我倒是希望將約束的UIImageView以適應裏面的UIView),但UIImageView的界限已經增長到適應全尺寸的圖像。爲什麼? (在更復雜的應用程序中,我繼續調整大小,旋轉視圖並轉換視圖,Apple's documentation指出「如果transform屬性包含非標識轉換,frame屬性的值是未定義的,並且在這種情況下,您可以使用中心屬性重新定位視圖,並使用bounds屬性調整大小。「示例代碼不使用轉換,但正如我所說的我的真實代碼所做的;我認爲這樣做會排除我設置框架。)
(*)我說的差不多,因爲UIImageView有四個約束,但在調試器中的計數是兩個。
還有更多的信息在後續問題[here](http://stackoverflow.com/q/35687251/575530) – dumbledad
您是否嘗試將Clip Subviews選項設置爲true? – ChikabuZ
是的 - 它買了我一個邊框,但我仍然瘋狂調整大小 – dumbledad