标签: nssplitview

如何在Interface Builder中禁用NSSplitView子视图的大小调整?

我在Interface Builder中创建了一个带有两个子视图的NSSplitView.我希望左侧视图具有固定宽度.我试图为两个子视图定义自动调整规则,但左侧子视图仍然在窗口大小调整时更改宽度(拆分视图填满窗口).可能是由NSSplitView的Autoresizes Subviews属性引起的?(我无法取消选中).我能做什么?

cocoa interface-builder nssplitview

5
推荐指数
2
解决办法
7327
查看次数

自动调整以编程方式创建的子视图

我有一个NSSplitView.在该拆分视图的左侧窗格中,我有一个NSTableView和一个以编程方式创建的自定义视图.我正在使用代理来确保我的两个窗格不会同时调整大小.

我这样添加自定义视图:

BWAnchoredButtonBar *anchoredButtonBar = [[[BWAnchoredButtonBar alloc] initWithFrame:[leftPane bounds]] autorelease];
[leftPane addSubview:anchoredButtonBar];
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常.当我运行我的应用程序一切正常.现在,我的问题是,当我调整拆分视图窗格时,自定义视图不会调整大小,在它与NSSplitView的分隔符之间留下一个丑陋的空白区域.

我想我想问的是,我如何以编程方式设置IB在视觉上设置的弹簧和支柱?

此外,我不能使用IB,因为Xcode 4不支持IB插件.

cocoa objective-c nsview nssplitview bwtoolkit

5
推荐指数
1
解决办法
2525
查看次数

以编程方式创建NSSplitView +子视图

我试图以NSSplitView编程方式创建一个水平,并添加2个子视图.不幸的是,如果我没有问题来创建splitview,我不知道如何添加子视图.

你有任何想法吗?

cocoa nssplitview

5
推荐指数
1
解决办法
5924
查看次数

如何在NSSplitView中更改分隔符的颜色?

我们可以改变分频器的颜色吗?Apple文档说,我们可以在NSSplitView的子类中覆盖-dividerColor,但这对我不起作用,或者我的理解不正确.我也尝试在分隔符上创建颜色层,例如:

colorLayer = [CALayer layer];
NSRect dividerFrame = NSMakeRect([[self.subviews objectAtIndex:0] frame].size.width, [[self.subviews objectAtIndex:0] frame].origin.y, [self dividerThickness], self.frame.size.height);

[colorLayer setBackgroundColor:[color coreGraphicsColorWithAlfa:1]];
[colorLayer setFrame:NSRectToCGRect(dividerFrame)];

[self.layer addSublayer:colorLayer];
Run Code Online (Sandbox Code Playgroud)

不行.

cocoa appkit nssplitview xcode4

5
推荐指数
4
解决办法
3057
查看次数

NSSplitView:如何不用窗口调整大小,只能以"手动"方式调整大小?

我有一个简单的垂直方向NSSplitView,当我调整窗口大小时我不会保持他的大小但是我想NSSplitView在拖动分隔两个视图的垂直条时允许手动调整大小.

编辑.这是我添加的代码,并且出于某种原因出错:左窗格(sourceView)在调整窗口大小时保持相同的大小,但右窗格具有正确的自动布局约束(在不实现下面的方法的情况下工作正常) .NSSrollView是左窗格,我不想保持在同一位置,而另一个视图可能会随窗口调整大小.

- (BOOL)splitView:(NSSplitView *)splitView shouldAdjustSizeOfSubview:(NSView *)subview
{
    if ([subview class] == [NSScrollView class])
        return NO;

    return YES;

}
Run Code Online (Sandbox Code Playgroud)

有人知道快速解决方案吗?谢谢!

objective-c nssplitview

5
推荐指数
3
解决办法
2984
查看次数

为什么我的拆分视图表现得像这样,我该如何解决?

我创建了一个分割视图控制器,显示两个视图,如下所示: 在此输入图像描述

当我编译它时,它给了我这个结果: 在此输入图像描述

不幸的是,第一个视图不可见,我必须从窗口的左侧拖动才能看到两个视图:
在此输入图像描述

首先,为什么拆分视图表现得像这样?为什么它从一开始就没有合适的尺寸?
如果我将此行添加到我的SplitViewController的viewDidLoad()函数:

splitView.adjustSubviews()
Run Code Online (Sandbox Code Playgroud)

然后两个视图出现,大小相同,但我不明白adjustSubviews()函数究竟做了什么,我无法控制其中任何一个的位置.

如何以编程方式修复它?如何调整每个视图的大小?有没有办法在界面构建器中调整它?

谢谢.

编辑:这个问题现在有50分的赏金

macos interface-builder nssplitview swift

5
推荐指数
1
解决办法
1528
查看次数

将 NSToolbarItems 与 NSSplitView 列对齐

Finder 和 Notes 有一种我正在寻求重现的特殊行为。NSToolbar 中的“灵活空间”似乎考虑了拆分视图的尺寸。例如,第一组按钮在侧边栏的左侧与右侧对齐。第二组图标与第一列的右侧对齐。当我加宽侧边栏时,工具栏项目随之移动。

有没有可能重现这个?

在此处输入图片说明


解决方案

使用@KenThomases 提供的解决方案,我实现了如下:

final class MainWindowController: NSWindowController {
    override func windowDidLoad() {
        super.windowDidLoad()
        window?.toolbar?.delegate = self
        // Make sure that tracking is enabled when the toolbar is completed
        DispatchQueue.main.async {
            self.trackSplitViewForFirstFlexibleToolbarItem()
        }
    }
}

extension MainWindowController: NSToolbarDelegate {
    func toolbarWillAddItem(_ notification: Notification) {
        // Make sure that tracking is evaluated only after the item was added
        DispatchQueue.main.async {
            self.trackSplitViewForFirstFlexibleToolbarItem()
        }
    }

    func toolbarDidRemoveItem(_ notification: Notification) {
        trackSplitViewForFirstFlexibleToolbarItem()
    }

    /// - Warning: This is a …
Run Code Online (Sandbox Code Playgroud)

cocoa nssplitview nstoolbar nstoolbaritem nssplitviewcontroller

5
推荐指数
1
解决办法
1480
查看次数

NSSplitView的状态不一致

我正在玩NSSplitView - 现在非常成功,但这是我的问题:

我的SplitView看起来像这样: 拆分视图

测试项目:https://www.dropbox.com/s/amz863l11nvkdir/TestNSSplitView.zip

我已经实现- (void)splitView:(NSSplitView *)splitView resizeSubviewsWithOldSize:(NSSize)oldSize了在调整大小时将左侧和右侧子视图保持与之前相同的大小.

如果我打开包含NSSplitView的窗口,则会在控制台中显示此消息:

<NSSplitView: 0x107de1520>: the delegate <BRSchematicWindowController: 0x10ac11050> was sent -splitView:resizeSubviewsWithOldSize: and left the subview frames in an inconsistent state:
Split view bounds: {{0, 0}, {1068, 600}}
     Subview frame: {{0, 0}, {182, 600}}
     Subview frame: {{183, 0}, {640, 600}}
     Subview frame: {{824, 0}, {243, 600}}
The outer edges of the subview frames are supposed to line up with the split view's bounds' edges. NSSplitView is working around …
Run Code Online (Sandbox Code Playgroud)

xcode cocoa objective-c nssplitview

4
推荐指数
1
解决办法
1034
查看次数

使用Swift设置NSSplitViewController窗格的宽度

Xcode 8.2.1,Swift 3.0.2,macOS 10.12

我有一个NSSplitViewController有3个窗格(请注意NS;这是一个Mac应用程序).

我正在尝试将最左侧的窗格设置为始终具有固定宽度,而不是可调整大小.我尝试过以下方法:

  • 出于某种原因,在窗格的子视图的Storyboard编辑器中无法使用自动布局约束.
  • 设置constrainMaxCoordinateconstrainMinCoordinate没有奏效.

有没有其他人最近上班?有很多关于这个主题的文章,但他们的工具集已有几年的历史了,他们的建议都没有对我有用.谢谢!

在此输入图像描述

macos nssplitview nssplitviewcontroller

4
推荐指数
1
解决办法
1828
查看次数

如何使用NSSplitViewController设置自定义NSSplitView?

我想使用自定义NSSplitView与我NSSplitViewController

文件说:

要提供自定义的拆分视图,请在继承的viewDidLoad()方法中调用super之前随时设置此属性。也就是说,在拆分视图控制器的isViewLoaded属性为true之前。

我的NSSplitViewController子类称为MainVC

我尝试-viewDidLoad在调用之前设置我的自定义拆分视图[super viewDidLoad]

- (void)viewDidLoad {
    self.splitView = [MySplitView new];
    [super viewDidLoad];
    // Rest of viewDidLoad...
}
Run Code Online (Sandbox Code Playgroud)

但这没用。我收到以下错误:

2017-09-02 10:35:43.527312-0700 Zee [6497:632581] ** *-[MainVC setSplitView:],/ BuildRoot / Library / Caches / com.apple.xbs / Sources / AppKit / AppKit-中的声明失败1561 / Controllers / NSSplitViewController.m:220

2017-09-02 10:35:43.527558-0700 Zee [6497:632581] MainVC:-splitView只能在加载视图之前分配

我也尝试覆盖loadView

- (void)loadView {
    self.splitView = [MySplitView new];
    [super loadView];
}
Run Code Online (Sandbox Code Playgroud)

但是我得到:

2017-09-02 10:39:39.377345-0700 …

macos cocoa appkit nssplitview nssplitviewcontroller

4
推荐指数
1
解决办法
643
查看次数