首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式调整NSSplitViewItems的大小

以编程方式调整NSSplitViewItems的大小
EN

Stack Overflow用户
提问于 2015-06-30 14:30:09
回答 2查看 1.1K关注 0票数 1

我正试图找到一种以编程方式调整NSSplitViewItems大小的方法。

假设NSWindow帧大小为500x500px。masterViewItem的宽度为100 of,而subViewItem的宽度为400 of。

FOO时,我希望masterViewItem折叠到0px (向左),而subViewItem则展开以填充整个窗口(500 0px)。

BAR时,我希望masterViewItem扩展回100 to,而subViewItem则折叠回原来的400 to。

代码语言:javascript
复制
- (IBAction) onTapOnSomeButton:(NSButton *)sender {

    NSWindow *window = [[NSApplication sharedApplication] mainWindow];
    NSSplitViewController *splitViewController = (NSSplitViewController *)[window contentViewController];
    NSSplitViewItem *masterViewItem =[splitViewController.splitViewItems firstObject];
    NSSplitViewItem *subViewItem = [splitViewController.splitViewItems lastObject];
    if (FOO) {
        [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
            //    Expand subViewItem 
        } completionHandler:^{
        }];
    } else if (BAR) {
        [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
            //    Expand masterViewItem while shrinking subViewItem
        } completionHandler:^{
        }];
    }
}

我能够动画每个项目,使它似乎崩溃/扩大,即。

代码语言:javascript
复制
subViewItem.viewController.view.animator.frame = CGRectMake(0, 0, window.frame.size.width, subViewItem.viewController.view.frame.size.height);

但是分隔器不会移动,使这两个项目单独移动,并且看起来不像整个屏幕正在折叠/扩展。

我将如何实现这一点?提前谢谢。

更新

所以我做了更多的研究,发现:

How to animate the NSSplitView while resizing?

所以我做了这样的代码:

代码语言:javascript
复制
- (IBAction) onTapOnSomeButton:(NSButton *)sender {
    NSWindow *window = [[NSApplication sharedApplication] mainWindow];
    NSSplitViewController *splitViewController = (NSSplitViewController *)[window contentViewController];
    NSSplitViewItem *masterViewItem =[splitViewController.splitViewItems firstObject];
    NSSplitViewItem *subViewItem = [splitViewController.splitViewItems lastObject];
    if (FOO) {
         NSMutableDictionary *collapseMainAnimationDict = [NSMutableDictionary dictionaryWithCapacity:2];
         [collapseMainAnimationDict setObject: subView forKey:NSViewAnimationTargetKey];
         NSRect newRightSubViewFrame = subView.frame;
         newRightSubViewFrame.size.width =  splitViewController.splitView.frame.size.width;
         [collapseMainAnimationDict setObject:[NSValue valueWithRect:newRightSubViewFrame] forKey:NSViewAnimationEndFrameKey];

         NSMutableDictionary *collapseInspectorAnimationDict = [NSMutableDictionary dictionaryWithCapacity:2];
         [collapseInspectorAnimationDict setObject: masterView forKey:NSViewAnimationTargetKey];
         NSRect newLeftSubViewFrame = masterView.frame;
         newLeftSubViewFrame.size.width = 0.0f;
         newLeftSubViewFrame.origin.x = splitViewController.splitView.frame.size.width;
         [collapseInspectorAnimationDict setObject:[NSValue valueWithRect:newLeftSubViewFrame] forKey:NSViewAnimationEndFrameKey];

         NSViewAnimation *collapseAnimation = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects: collapseMainAnimationDict, collapseInspectorAnimationDict, nil]];
         [collapseAnimation setDuration:0.3f];
         [collapseAnimation startAnimation];
         [splitViewController.splitView adjustSubviews];
         [splitViewController.splitView setNeedsDisplay: YES];
    } else if (BAR) {
        // Not yet implemented
    }
}

但没有效果。有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2015-06-30 14:36:44

您必须使用[NSSplitView setPosition:ofDividerAtIndex:]来调整窗格的大小。

我不知道NSSplitViewController是什么,但想必您可以通过它的view属性或其他类似的属性访问NSSplitView

票数 1
EN

Stack Overflow用户

发布于 2015-07-01 05:49:09

与其将其视为调整大小,不如尝试折叠/取消主视图项。您只需使用NSSplitViewItemcollapsed属性及其animator代理触发崩溃:

代码语言:javascript
复制
    if (FOO) {
        //    Expand subViewItem (collapse the master view item)
        masterViewItem.animator.collapsed = YES;

不塌陷:

代码语言:javascript
复制
    } else if (BAR) {
        //    Expand masterViewItem while shrinking subViewItem
        masterViewItem.animator.collapsed = NO;
    }
}

在10.11中,有API将主视图项指定为“侧栏”,它对该项具有额外的折叠/未折叠行为(例如覆盖)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31141121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档