如何使用自动布局为NSSplitView折叠设置动画

时间:2013-06-17 21:36:56

标签: cocoa core-animation autolayout nssplitview

我有一个如下设计的界面,在XIB中设置了自动布局。

[Left Pane]-[Center Pane]-[Right Pane]
[            Bottom Pane             ]

目前,它支持每个窗格的最大和最小宽度/高度,以及通过双击分隔符或使用NSSegmentedControl来折叠子视图。我现在要做的是动画当用户切换NSSegmentedControl时发生的崩溃。我已经看到很多使用NSSplitView设置动画的示例,用于折叠子视图但没有使用自动布局来完成它。

我尝试按照演示动画制作WWDC 2012视频中关于自动布局演示的约束动画。但由于这是我第一次启用自动布局,我还没有想出如何做到这一点。

以下是我目前所拥有的

NSArray *constraints = [self.leftPane constraints];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstAttribute = %d", NSLayoutAttributeWidth];
NSArray *filteredArray = [constraints filteredArrayUsingPredicate:predicate];

[self.leftPane removeConstraints:filteredArray];

[self.lcrSplitView layoutSubtreeIfNeeded];

[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
    [context setAllowsImplicitAnimation:YES];

    NSLayoutConstraint *newWidth = [NSLayoutConstraint constraintWithItem:self.leftPane
                                                                attribute:NSLayoutAttributeWidth
                                                                relatedBy:NSLayoutRelationEqual
                                                                   toItem:nil
                                                                attribute:NSLayoutAttributeNotAnAttribute
                                                               multiplier:0.0f
                                                                 constant:0.0f];

    [self.leftPane addConstraint:newWidth];


    [self.lcrSplitView layoutSubtreeIfNeeded];
} completionHandler:^{}];

1 个答案:

答案 0 :(得分:1)

对于任何针对10.11 El Capitan的人来说,这对我有用。

splitViewItem.collapsed = YES;