2013-07-03 53 views
1

我有一點難以讓NSSplitView自身行爲。NSSplitView窗口調整大小的固定分配器?

我目前所面對的是什麼:

NSWindow 
    NSView 
     NSSplitView 
     navView <NSView> 
     contentView <NSView> 

我遇到的問題是與分流移動位置,當我調整窗口的大小。

在拆分視圖委託我已經有了:

-(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,因爲它應該。我怎樣才能阻止它移動?

我已經試過自動佈局,這是一個有點一場噩夢使用的,所以我從字面上禁用它,並手動嘗試沒有快樂做..

任何想法?

+1

剛剛添加,當我編程設置窗口框架以適應contentView中的更大子視圖時,這完全是錯誤的! –

回答

2

我已經工作了......

-(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]; 
} 
3

我寫上面的代碼斯威夫特與定義的可能性擴展它,無論是左還是右視圖,必須優先考慮:

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)) 
    } 
} 
0
- (BOOL)splitView:(NSSplitView *)aSplitView shouldAdjustSizeOfSubview:(NSView *)subview 
{ 
    return subview == rightView; 
} 

將此添加到您的代表。

如果您的NSSplitView包含lefView和rightView,這將使leftView保持固定的寬度,rightView將在調整主窗口大小時調整大小。