2016-10-04 51 views
9

10.12有几个巨大的变化,但在我看来最大的是新的自动布局系统(或修改/重写的旧版本......谁知道)。我准备了一个简单的项目来演示这个问题。它与通过按钮折叠拆分视图项目有关。它只在10.12发生。所有你需要做的就是编译项目并点击按钮。将出现错误:macOS 10.12自动布局问题

2016-10-04 15:10:28.284296 test-12 [64932:7425277] [布局]检测到缺少约束。它不能被放置,因为没有足够的约束来完全定义大小和原点。添加缺少的约束,或者设置translatesAutoresizingMaskIntoConstraints = YES,将为您生成约束条件。如果在macOS 10.12及更高版本中手动布置此视图,则可以选择不要从覆盖中调用[超级布局]。在DETECTED_MISSING_CONSTRAINTS上设置断点以进行调试。此错误只会记录一次。

(lldb) po $arg1 
<NSSplitDividerView: 0x618000161980> 

上午我完全错误的或有一定的问题,10.12:

设置断点,我们可以发现,有问题的看法是后?如果可能,请咨询如何防止此类错误。

该项目可从github

下载再次感谢你的帮助。

I.尼科洛夫

+2

我可以简单地通过调用NSAlert.layout()来强制警报立即自行触发,从而触发此消息。由于没有任何建议在这种情况下工作,并且没有明显的方法来避免这种错误,所以我提交了一个雷达(rdar:// 28700495)。 – rsfinn

+4

我通过在我的'NSSplitViewController'中返回'splitView'(splitView(_ splitView:NSSplitView,shouldHideDividerAt dividerIndex:Int) - > Bool')来解决这个问题。 – LShi

+0

@LShi:谢谢我有同样的问题,它也适用于我。 – mschmidt

回答

0

我有同样的自动布局的问题,我发现我的项目解决方法。 在添加子视图及其约束之后,我将该窗口称为“布局”。不幸的是,我在每次“添加”调用后都会这样做,否则系统会再次抛出丑陋的消息。它适用于我,我只是在初始化期间调用它。

// Left Split View 
    [self.scrollviewMain setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    [self.viewMainLeft addSubview:self.scrollviewMain]; 
    [self.viewMainLeft addConstraint:[NSLayoutConstraint constraintWithItem:self.viewMainLeft attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.scrollviewMain attribute:NSLayoutAttributeBottom multiplier:1.0 constant:l_floatConstant]]; 
    [self.viewMainLeft addConstraint:[NSLayoutConstraint constraintWithItem:self.viewMainLeft attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.scrollviewMain attribute:NSLayoutAttributeTop multiplier:1.0 constant:-l_floatConstant]]; 
    [self.viewMainLeft addConstraint:[NSLayoutConstraint constraintWithItem:self.viewMainLeft attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.scrollviewMain attribute:NSLayoutAttributeLeft multiplier:1.0 constant:-l_floatConstant]]; 
    [self.viewMainLeft addConstraint:[NSLayoutConstraint constraintWithItem:self.viewMainLeft attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.scrollviewMain attribute:NSLayoutAttributeRight multiplier:1.0 constant:l_floatConstant]]; 
    [self.windowMain layoutIfNeeded]; 
    // Right Split View 
    [self.scrollviewDetails setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    [self.viewMainRight addSubview:self.scrollviewDetails]; 
    [self.viewMainRight addConstraint:[NSLayoutConstraint constraintWithItem:self.viewMainRight attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.scrollviewDetails attribute:NSLayoutAttributeBottom multiplier:1.0 constant:l_floatConstant]]; 
    [self.viewMainRight addConstraint:[NSLayoutConstraint constraintWithItem:self.viewMainRight attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.scrollviewDetails attribute:NSLayoutAttributeTop multiplier:1.0 constant:-l_floatConstant-1]]; 
    [self.viewMainRight addConstraint:[NSLayoutConstraint constraintWithItem:self.viewMainRight attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.scrollviewDetails attribute:NSLayoutAttributeLeft multiplier:1.0 constant:-l_floatConstant]]; 
    [self.viewMainRight addConstraint:[NSLayoutConstraint constraintWithItem:self.viewMainRight attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.scrollviewDetails attribute:NSLayoutAttributeRight multiplier:1.0 constant:l_floatConstant]]; 
    [self.windowMain layoutIfNeeded]; 
+0

但是......你应该同意这不是正确的布局方式......肯定有什么错误......或者至少是被曲解了。反正 - 谢谢你的信息。有几种这样的解决方法,在我看来,这些解决方法既不高效,也不复杂。让我们希望将来事情会发生变化,否则我们将获得更多信息以防止出现这种情况。 –