2016-06-09 48 views
0

enter image description hereenter 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作为视图的类,因为您可以看到它们都在左侧显示“性能视图”。其中4个。

+0

只需添加一个可选的(如果你想暗示解开)'NSLayoutConstraint'财产,有这个'initialize'方法更新它,而不是使其成为一个局部变量。顺便说一句,我可能会为这个方法选择一个不同的名称,因为这会引起与从NSObject继承的'initialize'类方法的混淆。 – Rob

回答

0

确保您添加您的自定义类到您的UIView在你的故事板

enter image description here

课下键入您的自定义类 - PerformanceView

创建连接变量从你的故事板保持约束

@IBOutlet weak var heightConstraint:NSLayoutConstraint? 

然后右键单击并拖动连接

enter image description here

+0

通过子类。我的意思是一个UIView。不是UIViewController。 – KotaBear233

+0

其相同的过程 –

+0

请看我添加的图像。它不会让我添加约束到UIView – KotaBear233

1

如果我正确理解你的问题,答案是肯定的,有一种方法。您只需使用助理编辑器将插口拖到您的PerformanceView中即可。

enter image description here

作为辅助手段 - 您可以通过使用.constant修改约束代码。目前不支持修改优先级。

heightConstraint.constant = 230.0 //or any other value 

为了拖动插座,您必须确保在故事板编辑器中正确识别了您的PerformanceView。因此请在左栏中选择您的PerformanceView。然后在右栏中高亮显示的字段中输入“PerformanceView”,如下所示,然后按回车键。现在你应该很好去。

enter image description here

+0

通过子类。我的意思是一个UIView。不是UIViewController。 – KotaBear233

+0

就像卢克说:] - 这在任何情况下都有效。你正在处理一个常规出路。 – caxix

+0

看看我添加的图像。 – KotaBear233

0

如果你正在寻找从IB添加到@IBOutlet子视图UIView,它会出现的控制从控制-dragging下到源代码协助编辑标准伎俩没有按”工作。

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

class PerformanceView: UIView { 

    @IBOutlet weak var heightConstraint: NSLayoutConstraint! 

} 

现在你可以在左边距从空连接点拖到旁边@IBOutlet到约束:

enter image description here

或者,或者,控制 - 单击文档大纲中的PerformanceView,然后从弹出窗口中列出的出口拖至约束:

enter image description here