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