首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSSplitView固定拆分器窗口大小调整?

NSSplitView固定拆分器窗口大小调整?
EN

Stack Overflow用户
提问于 2013-07-03 15:15:10
回答 3查看 2.1K关注 0票数 2

我有一点困难,让一个NSSplitView表现自己。

我目前所掌握的是:

代码语言:javascript
复制
NSWindow
   NSView
      NSSplitView
         navView <NSView>
         contentView <NSView>

我遇到的问题是当我调整窗口大小时拆分器的移动位置。

在我已经得到的拆分视图委托中:

代码语言:javascript
复制
-(CGFloat)splitView:(NSSplitView *)splitView constrainMaxCoordinate:(CGFloat)proposedMaximumPosition ofSubviewAt:(NSInteger)dividerIndex{
    return 200;
}

-(CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex{
    return 200;

}

尽管如此,当我调整窗口大小时,拆分器仍然在移动。

如果我点击他的拆分器,它会像往常一样迅速回到200px。我怎么才能阻止它移动呢?

我尝试过Autolayout,使用起来有点像噩梦,所以我真的禁用了它,并在没有joy的情况下手动尝试。

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-10 21:05:53

我已经想好了..。

代码语言:javascript
复制
-(void)splitView:(NSSplitView *)sender resizeSubviewsWithOldSize:(NSSize)oldSize
{
    CGFloat dividerThickness = [sender dividerThickness];
    NSRect leftRect  = [[[sender subviews] objectAtIndex:0] frame];
    NSRect rightRect = [[[sender subviews] objectAtIndex:1] frame];
    NSRect newFrame  = [sender frame];

    leftRect.size.height = newFrame.size.height;
    leftRect.origin = NSMakePoint(0, 0);
    rightRect.size.width = newFrame.size.width - leftRect.size.width
- dividerThickness;
    rightRect.size.height = newFrame.size.height;
    rightRect.origin.x = leftRect.size.width + dividerThickness;

    [[[sender subviews] objectAtIndex:0] setFrame:leftRect];
    [[[sender subviews] objectAtIndex:1] setFrame:rightRect];
}
票数 2
EN

Stack Overflow用户

发布于 2015-05-10 05:22:33

我为Swift编写了上面的代码,并对其进行了扩展,可以定义是左视图还是右视图:

代码语言:javascript
复制
var preferringLeftSideOfSplitView = true

func splitView(splitView: NSSplitView, resizeSubviewsWithOldSize oldSize: NSSize) {
    var dividerThickness = splitView.dividerThickness

    var leftRect = splitView.subviews[0].frame
    var rightRect = splitView.subviews[1].frame

    // Resizing and placing the left view
    splitView.subviews[0].setFrameOrigin(NSMakePoint(0, 0))
    if self.preferringLeftSideOfSplitView == true {
        splitView.subviews[0].setFrameSize(NSMakeSize(leftRect.width, splitView.frame.size.height))
    } else {
        splitView.subviews[0].setFrameSize(NSMakeSize(splitView.frame.size.width - rightRect.width - dividerThickness, splitView.frame.size.height))
    }

    // Resizing and placing the right view
    if self.preferringLeftSideOfSplitView == true {
        splitView.subviews[1].setFrameOrigin(NSMakePoint(leftRect.size.width + dividerThickness, 0))
        splitView.subviews[1].setFrameSize(NSMakeSize(splitView.frame.size.width - leftRect.size.width - dividerThickness, splitView.frame.size.height))
    } else {
        splitView.subviews[1].setFrameOrigin(NSMakePoint(splitView.frame.size.width - rightRect.width, 0))
        splitView.subviews[1].setFrameSize(NSMakeSize(rightRect.size.width, splitView.frame.size.height))
    }
}
票数 3
EN

Stack Overflow用户

发布于 2017-08-22 05:34:28

代码语言:javascript
复制
- (BOOL)splitView:(NSSplitView *)aSplitView shouldAdjustSizeOfSubview:(NSView *)subview
{
    return subview == rightView;
}

将此添加到您的代理中。

如果您的NSSplitView包含lefView和rightView,这将使leftView保持固定宽度,并且rightView将在调整主窗口大小时调整大小。

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

https://stackoverflow.com/questions/17441877

复制
相关文章

相似问题

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