簡體   English   中英

不能在UIView中居中快速子視圖?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM