繁体   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