Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在何处添加我希望使用AutoLayout在NSScrollView中浮动的子视图?_Objective C_Cocoa_Swift_Autolayout_Nsscrollview - Fatal编程技术网

Objective c 在何处添加我希望使用AutoLayout在NSScrollView中浮动的子视图?

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

我有几个视图需要与正在创建的NSScrollView的自定义子类协作。一种类型的视图需要相对于NSScrollView中的滚动完全固定,另一种类型的视图需要将其外壳固定在相对于滚动的位置,但允许内部内容随着滚动视图的更改而滚动(例如电子表格中的列标题)

以下是在视图层次AFAIK中放置这些视图的选项:

  • NSScrollView的子视图(最有意义,但我得到以下错误:
    ***+[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant::乘数为0或零秒的项与第一个属性的位置一起,会对等于常量的位置创建非法约束。位置属性必须成对指定)
  • NSScrollView的superview的子视图(这似乎工作得更好,但从设计角度看,这并不正确,因为我希望我的视图成为scrollView的一部分)
  • ===

    我在网上不止一个地方读到,我将无法使用
    视觉格式语言
    方法设置约束,因为浮动约束不是相对于即时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。其中一个是。我解决了这个问题,错误就消失了