【问题标题】:Swift Constraints in Subclass子类中的 Swift 约束
【发布时间】:2016-06-09 20:30:28
【问题描述】:

我想知道是否有办法从子类访问约束。我有一个自定义视图。我不确定是否可以访问我已经在 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 作为视图的类,你可以看到他们都在左边说 Performance View。其中 4 个。

【问题讨论】:

  • 只需添加一个可选的(如果需要,可以隐式解包)NSLayoutConstraint 属性并让这个initialize 方法更新它,而不是使其成为局部变量。顺便说一句,我可能会为此方法选择一个不同的名称,因为这会导致与继承自 NSObjectinitialize 类方法混淆。

标签: swift swift2 nslayoutconstraint autolayout


【解决方案1】:

如果我正确理解您的问题,答案是肯定的,有办法。您可以使用助手编辑器简单地将出口到您的约束拖到您的 PerformanceView 中。

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

heightConstraint.constant = 230.0 //or any other value

为了拖动出口,您必须确保在情节提要编辑器中正确识别了 PerformanceView。因此,在左栏中选择您的 PerformanceView。然后在右栏中突出显示的字段中键入“PerformanceView”,如下所示,然后按回车键。现在你应该可以开始了。

【讨论】:

  • 按子类。我的意思是 UIView。不是 UIViewController。
  • 就像卢克说的:] - 这在任何一种情况下都有效。你正在处理一个普通的出口。
  • 看看我添加的图片。
  • 我看到了,但您没有修改您的问题。你还有问题吗?
  • 是的,我是。我确实有 PerformanceView 作为视图的类。而且仍然不允许我将约束连接到视图..
【解决方案2】:

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

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

创建连接变量以保存情节提要中的约束

@IBOutlet weak var heightConstraint:NSLayoutConstraint?

然后右键单击并拖动连接

【讨论】:

  • 按子类。我的意思是 UIView。不是 UIViewController。
  • 同一个过程
  • 请看我添加的图片。它不会让我将约束添加到 UIView
  • 查看我的编辑。确保将自定义类添加到情节提要中的 uiview
  • 我确实有 PerformanceView 作为视图的类。而且仍然不允许我将约束连接到视图类文件..
【解决方案3】:

如果您希望将 IB 中的 @IBOutlet 添加到 UIView 子视图,则似乎是 control 的标准技巧 - 从控件向下拖动到帮助中的源代码编辑器不起作用。

有时 IB 会与 outlet 混淆,但幸运的是,还有其他方法可以添加 outlet,而且这些其他机制似乎工作正常。例如,您可以手动将@IBOutlet 代码添加到您的PerformanceView

class PerformanceView: UIView {

    @IBOutlet weak var heightConstraint: NSLayoutConstraint!

}

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多