子类中的Swift约束

时间:2016-06-09 20:30:28

标签: swift swift2 nslayoutconstraint nsautolayout

enter image description here enter image description here我想知道是否有办法从子类访问约束。我有一个自定义视图。我不确定我是否可以访问我已经在UI中设置的约束,所以我尝试从子类本身创建约束。

class PerformanceView: UIView {
    func initialize() {
        let heightConstraint = NSLayoutConstraint(item: self, attribute: .Height, relatedBy: .Equal, toItem: superview, attribute: .Height, multiplier: 0.47, constant: 0);
        superview.addConstraint(heightConstraint)
    }
}

上述代码不完整。只是展示我试图做的事情。所以有两个问题。

1)我可以从子类访问UI上的约束。 2)如果没有,我如何在子类中创建一个高度约束,该高度约束是超视图高度的一半。

我确实将PerformanceView作为View的类,因为你可以看到它们都在左侧显示Performance View。其中4个。

3 个答案:

答案 0 :(得分:1)

如果我理解你的问题,答案是肯定的,有办法。您只需使用“助理编辑器”将插座中的插座拖动到PerformanceView中即可。

enter image description here

作为附件 - 您可以使用.constant修改代码中的约束。目前不支持修改优先级。

heightConstraint.constant = 230.0 //or any other value

要拖动插座,您必须确保在故事板编辑器中正确识别了PerformanceView。因此,请在左栏中选择PerformanceView。然后输入" PerformanceView"进入右栏中突出显示的字段,如下所示,然后点击返回。现在你应该好好去。

enter image description here

答案 1 :(得分:0)

确保将自定义类添加到故事板中的UIView

enter image description here

在自定义类的类类型下 - PerformanceView

创建连接变量以保存故事板中的约束

@IBOutlet weak var heightConstraint:NSLayoutConstraint?

然后右键单击并拖动连接

enter image description here

答案 2 :(得分:0)

如果您要将@IBOutlet从IB添加到UIView子视图,似乎控制的标准技巧 - 从控件下拉到辅助编辑器中的源代码不起作用。

有时IB会对网点感到困惑,但幸运的是,还有其他方法可以添加网点,这些其他机制似乎也能正常运行。例如,您可以手动将@IBOutlet代码添加到PerformanceView

class PerformanceView: UIView {

    @IBOutlet weak var heightConstraint: NSLayoutConstraint!

}

现在,您可以从@IBOutlet旁边的左边距中的空连接点拖动到约束:

enter image description here

或者, control - 点击文档大纲中的PerformanceView,然后从弹出窗口中列出的插座拖动到约束中:

enter image description here