【问题标题】:Reposition an NSBox in the top pane of a horizontal NSSplitView在水平 NSSplitView 的顶部窗格中重新定位 NSBox
【发布时间】:2009-12-22 03:32:16
【问题描述】:

我遇到的问题与 Cocoa 中的坐标系有关,但我真的不知道。这一切都发生在水平NSSplitView 的顶部窗格中。

非常简单,我试图将一个NSBox 放置在第二个的正下方(我将自定义视图加载到框中 - 一切正常)。顶框的左上角位于窗格的左上角并且永远不会改变。如果顶部NSBox 的高度缩小,我希望第二个NSBox 的顶部在其下方向上滑动。相反,如果顶部NSBox's 的高度增加,我希望底部NSBox 向下滑动。

此代码被调用两次。盒子是正确的(第一次是顶部盒子,第二次是底部盒子)并且 v 是正确的(这是我正在加载到盒子中的视图 - 这工作正常,它是导致顶部盒子高度变化的原因)。

 NSSize destBoxSize = [[box contentView] frame].size;  //the size of the box in the view to load the view into
 NSSize newViewSize = [v frame].size;  // the size of the view to be loaded 

 float deltaWidth = [horizSplitView frame].size.width - destBoxSize.width;
 float deltaHeight = newViewSize.height - destBoxSize.height;
 NSRect boxFrame = [box frame];
 boxFrame.size.height += deltaHeight;
 boxFrame.size.width += deltaWidth; 
 boxFrame.origin.y -= deltaHeight;

 NSLog(@"vc=%@ boxFrame x%f y%f h%f w%f", nibName, boxFrame.origin.x, boxFrame.origin.y, boxFrame.size.height, boxFrame.size.width);

 // Clear the box for resizing
 [box setContentView:nil]; 
 [box setContentView:v];
 [box setFrame:boxFrame];

【问题讨论】:

  • 如果每行代码加四个空格,会高亮显示;这样,它更容易阅读,并在其他单词之间看到它。
  • “我正在尝试将一个 NSBox 放在第二个的正下方(我将自定义视图加载到框中 - 一切正常)。 ...如果顶部 NSBox 的高度缩小,我希望第二个 NSBox 的顶部在它的正下方向上滑动。相反,如果顶部 NSBox 的高度增加,我希望底部 NSBox 向下滑动。”你的意思是下部盒子的高度永远不会改变?那么是什么填满了这个空间呢?
  • 请使用代码按钮 (101 010) 格式化您的代码。只需选择代码(带有 cmets),剪切它,单击编辑器的代码按钮,然后再次将代码粘贴到“在此处输入代码”的位置。
  • 抱歉格式化代码。顶盒高度发生变化。较低的盒子高度永远不会。它应该从顶部框的底部延伸到拆分视图的水平分隔线。感谢您迄今为止的所有 cmets。

标签: cocoa frame nssplitview nsbox


【解决方案1】:

你想做的事情并不难,但它需要一些子类化。首先,您需要继承 NSSplitView 和其中之一并覆盖 -(void)init 或 -(void)awakeFromNib 以添加此行:

[self setAutoresizesSubviews:YES];  //

然后你需要对这两个盒子进行子类化并设置它们的自动调整大小掩码,在 -(void)init 或 - (void)viewWillMoveToSuperview:(NSView *)newSuperView 中。 对于您可能想要的第一个框:

[newInstance setAutoresizingMask:NSViewNotSizable];

对于第二个 bbox,您可能需要:

[newInstance setAutoresizingMask:NSViewMinXMargin | NSViewMinYMargin];

另见NSView。需要进行一些试验才能获得正确的组合,但效果非常好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 2017-11-24
    • 1970-01-01
    相关资源
    最近更新 更多