我有以下具有以下约束的视图:
@IBOutlet weak var square1ViewOutlet: UIView!
使用故事板在以下视图中插入:
@IBOutlet weak var holderView: UIView!
我的问题是我无法覆盖故事板所建立的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 )
知道我在这里做错了什么吗?
答案 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文件中设置的约束。如果您确实想要更改视图框架,那么最好的方法是为约束创建出口并更改该约束的值。希望这会有所帮助:)