Objective c 在何处添加我希望使用AutoLayout在NSScrollView中浮动的子视图?
我有几个视图需要与正在创建的NSScrollView的自定义子类协作。一种类型的视图需要相对于NSScrollView中的滚动完全固定,另一种类型的视图需要将其外壳固定在相对于滚动的位置,但允许内部内容随着滚动视图的更改而滚动(例如电子表格中的列标题) 以下是在视图层次AFAIK中放置这些视图的选项:Objective c 在何处添加我希望使用AutoLayout在NSScrollView中浮动的子视图?,objective-c,cocoa,swift,autolayout,nsscrollview,Objective C,Cocoa,Swift,Autolayout,Nsscrollview,我有几个视图需要与正在创建的NSScrollView的自定义子类协作。一种类型的视图需要相对于NSScrollView中的滚动完全固定,另一种类型的视图需要将其外壳固定在相对于滚动的位置,但允许内部内容随着滚动视图的更改而滚动(例如电子表格中的列标题) 以下是在视图层次AFAIK中放置这些视图的选项: NSScrollView的子视图(最有意义,但我得到以下错误: ***+[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toI
***+[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant::乘数为0或零秒的项与第一个属性的位置一起,会对等于常量的位置创建非法约束。位置属性必须成对指定)
视觉格式语言
方法设置约束,因为浮动约束不是相对于即时superview设置的。这就是我在上面做错事的线索,因为第二种方法可以使用VCL,而第一种方法需要手动创建NSLayoutConstraint
===
以下是我添加到NSScrollView子类初始化器中的Swift代码:
topCorner = NSButton()
topCorner.translatesAutoresizingMaskIntoConstraints = false
topCorner.bezelStyle = NSBezelStyle.CircularBezelStyle //.RecessedBezelStyle
topCorner.setButtonType(NSButtonType.PushOnPushOffButton)
topCorner.identifier = "topCorner"
topCorner.title = "TC"
self.addSubview(topCorner)
thc = NSLayoutConstraint(item: self.topCorner, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: self.superview, attribute: NSLayoutAttribute.Left, multiplier: 1.0, constant: 0.0)
self.addConstraint(thc)
thc1 = NSLayoutConstraint(item: self.topCorner, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1.0, constant: 36.0)
self.addConstraint(thc1)
thc2 = NSLayoutConstraint(item: self.topCorner, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.superview, attribute: NSLayoutAttribute.Top, multiplier: 1.0, constant: 0.0)
self.addConstraint(thc2)
thc3 = NSLayoutConstraint(item: self.topCorner, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1.0, constant: 24.0)
self.addConstraint(thc3)
只是为了进一步混淆,我得到的错误消息只有在代码中有thc和thc2约束时才会出现。(尝试注释出不同的约束,以查看导致可怕错误文本的原因。)错误消息是由于添加约束时未创建
self.superview
的关系造成的
由于无法将两个约束thc和thc2添加到NSScrollView,因此会出现进一步的错误,需要将它们添加到其superview
尽管上述操作仍然不能产生我想要的结果,但它消除了运行时出现的两个错误。如果您尝试向不在视图层次结构中的视图添加约束,则会出现这种情况。自动布局限制 为了调试它,我计算出了导致问题的编程创建的约束。然后我调试到这一点,并在添加约束时检查约束中的两个视图都不为null。其中一个是。我解决了这个问题,错误就消失了