3

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

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

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

我试图按照 WWDC 2012 视频中 Auto Layout Demo 中提供的动画约束演示。但由于这是我第一次启用自动布局,我还没有弄清楚如何去做。

以下是我目前拥有的

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:^{}];
4

1 回答 1

1

对于任何以 10.11 El Capitan 为目标的人来说,这对我有用。

splitViewItem.collapsed = YES;
于 2015-12-11T16:24:16.733 回答