定位UIView编程不工作 - 坚持故事板定位

时间:2016-05-20 00:15:10

标签: ios swift uiview

我有以下具有以下约束的视图:

@IBOutlet weak var square1ViewOutlet: UIView!

enter image description here

使用故事板在以下视图中插入:

@IBOutlet weak var holderView: UIView!

enter image description here

我的问题是我无法覆盖故事板所建立的square1ViewOutlet的定位。以下代码没有任何效果。我已经尝试了一些变体,但没有任何效果,视图确实坚持以前的故事板约束。我用viewDidLoad方法调用它。

    square1ViewOutlet.frame.origin.y = self.holderView.frame.origin.y + 20
    square1ViewOutlet.frame.origin.x = self.holderView.frame.origin.x + 20
    square1ViewOutlet.frame = CGRectOffset(CGRect(origin: square1ViewOutlet.frame.origin, size: square1ViewOutlet.frame.size), 20, 20)

    square1ViewOutlet.center = CGPointMake(150, 150)
    square1ViewOutlet.frame = CGRectMake( 100, 200, square1ViewOutlet.frame.size.width, square1ViewOutlet.frame.size.height )

知道我在这里做错了什么吗?

2 个答案:

答案 0 :(得分:1)

当您使用自动布局并尝试更改框架尺寸或位置(如代码)时,您可以禁用约束效果,从而导致警告和意外的视图尺寸和移动。

正确的方法是将约束作为IBOutlets链接到代码中:

@IBOutlet weak var customViewTopConstraint: NSLayoutConstraint
@IBOutlet weak var customViewHeightConstraint: NSLayoutConstraint
@IBOutlet weak var customViewLeadingConstraint: NSLayoutConstraint
@IBOutlet weak var customViewWidthConstraint: NSLayoutConstraint

使用这些属性来改变它的常量值(.constant)。 这些规则适用于您必须更改框架尺寸的所有代码,因此请检查所有代码并将其更改为约束工作。

答案 1 :(得分:0)

您可以在viewDidAppear()方法中尝试使用该代码吗?请转到iOS UIViewController Lifecycle下方的链接。

由于您已将代码放在viewDidLoad方法中,这可能是您的框架未应用的原因。

如果这不起作用,请在设置框架后尝试layoutIfNeeded方法查看您的视图。如果需要,layoutIfNeeded会强制接收者立即布置其子视图。

通过这种方式,您可以为视图设置框架。但是这样做会改变你在xib文件中设置的约束。如果您确实想要更改视图框架,那么最好的方法是为约束创建出口并更改该约束的值。希望这会有所帮助:)