现在我想在我的应用运行时隐藏或显示我的条件分隔符。使用了这个委托方法:
- (BOOL)splitView:(NSSplitView *)splitView shouldHideDividerAtIndex:(NSInteger)dividerIndex
{
if (A)
return YES;
else
return NO;
}
但它不起作用,为什么?如何使用这种方法?非常感谢你!
答案 0 :(得分:9)
继上面的@ carmin注释,覆盖NSSplitView dividerThickness
属性是唯一对我有用的东西(具体来说,从splitView返回NSRectZero:effectiveRect:forDrawnRect:ofDividerAtIndex:NSSplitView委托方法 - {{3 - 没有用,导致浮动分隔符与视图本身脱节。)
这是Swift中的代码:
override var dividerThickness:CGFloat
{
get { return 0.0 }
}
答案 1 :(得分:4)
拆分视图将该消息发送给其委托,询问委托是否应该隐藏该分隔符。所以,be the delegate,并回答拆分视图的问题。
请务必查看the documentation。该消息可能无法实现您的目标。该文档列出了您通过回复该消息可以做的所有事情。
答案 2 :(得分:3)
您可以重载NSSplitView-dividerThickness并返回0以隐藏所有分隔符。您可以重载NSSplitView-drawDividerInRect:以单独控制分隔符(选择允许super绘制分隔符)。即使子视图可见,这些选择仍然有效。
答案 3 :(得分:2)
以下是如何在不涉及子类化的Obj-C中执行此操作。确保您已连接IB中的SplitView委托。
然后在你的委托类中:
-(NSRect)splitView:(NSSplitView *)splitView effectiveRect:(NSRect)proposedEffectiveRect forDrawnRect:(NSRect)drawnRect ofDividerAtIndex:(NSInteger)dividerIndex
{
if ( [_splitView subviews][1].isHidden ==YES || [[_splitView subviews][1] frame].size.height < 50) //closed or almost closed
{
return NSZeroRect;
}
return proposedEffectiveRect;
}
- (BOOL)splitView:(NSSplitView *)splitView shouldHideDividerAtIndex:(NSInteger)dividerIndex
{
if ( [_splitView subviews][1].isHidden ==YES || [[_splitView subviews][1] frame].size.height < 50)
{
return YES;
}
return NO;
}
这将在分割视图关闭时隐藏分隔符,但在打开时显示它。
如果您不希望它们即使在打开时也能拖动它,只需删除第一个方法中的所有代码并仅返回NSZeroRect。在第二种方法中执行相同操作,只返回YES。
答案 4 :(得分:0)
为了后代,使用swift 2你可以调用委托函数splitView(_:effectiveRect:forDrawnRect:ofDividerAtIndex :)并让它返回一个空的NSRect
func splitView(splitView: NSSplitView, effectiveRect proposedEffectiveRect: NSRect, forDrawnRect drawnRect: NSRect, ofDividerAtIndex dividerIndex: Int) -> NSRect {
return NSRect.init()
}