[英]Centering subviews in UIView does't work in swift?
我在UIView( externalView )內部有一個UIView(稱為innerView )。 outsideView具有自動布局約束,並且始終位於根視圖的中心。 innerView只是任意放置在externalView中,沒有任何約束。 它們都通過插座鏈接到視圖控制器。
我希望將innerView始終居於outerView內部。 當然,我可以使用自動布局,但是我只需要測試是否可以通過代碼移動它(因為我發現這在我的真實項目中是個問題)
不幸的是,我發現我無法使用代碼移動innerView。 有人知道原因嗎?
這是代碼:
import UIKit
class ViewController: UIViewController {
// outerView is 300 X 300
@IBOutlet weak var outerView: UIView!
// innerView is 140 X 140, and it is the subview of outerView
@IBOutlet weak var innerView: UIView!
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
innerView.center = CGPoint(x: outerView.bounds.midX, y: outerView.bounds.midY)
innerView.autoresizingMask = .None
// result is : (150.0, 150.0) which is correct
print(innerView.center)
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
// result is : (78.0, 222.0) which is not correct
print(innerView.center)
}
}
從viewDidLayoutSubviews
,這只是一個通知您的事件,viewcontroller根視圖的所有子視圖都位於所需的位置。 您不保證這些子視圖的所有其余子視圖也將對齊,因為這是父視圖本身的責任。
因此,將您的中心innerView代碼移至:
override func viewDidAppear(animated: Bool){
super.viewDidAppear(animated)
innerView.center = CGPoint(x:outerView.bounds.midX , y:outerView.bounds.midY)
}
如果支持方向:
override func willAnimateRotationToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
innerView.center = CGPoint(x:outerView.bounds.midX , y:outerView.bounds.midY)
}
嘗試這個:
innerView.center = outerView.convertPoint(outerView.center, fromView: outerView.superview)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.