NSSplitView

本文代码最终实现界面为

两种方法可以实现divider的上下拖动:

1.调用NSSplitViewDelegate

/* Given a proposed position for one of the dividers of a split view, return a position at which the divider should be placed as the user drags it. If a split view has no delegate, or if its delegate does not respond to this message, the split view behaves as if it has a delegate that responds to this message by merely returning the proposed position. If a split view has a delegate, and the delegate responds to this message, it will be sent repeatedly as the user drags one of the split view's dividers.

*/

- (CGFloat)splitView:(NSSplitView *)splitView constrainSplitPosition:(CGFloat)proposedPosition ofSubviewAt:(NSInteger)dividerIndex;

用此方法要先设置splitview的delegate为当前app([_splitOuter setDelegate:self];)或

 

- (CGFloat)splitView:(NSSplitView *)splitView constrainSplitPosition:(CGFloat)proposedPosition ofSubviewAt:(NSInteger)dividerIndex

{

     NSLog(@"split view is being dragged");

    CGFloat position = proposedPosition;

    return position;

}

2.调用通知

- (void) splitViewDidResizeSubviews:(NSNotification *)notification

//- (void) splitViewDidResizeSubviews:(NSNotification *)notification

//{

//    

//    NSSplitView *split = [notification object];

//    NSString *splitName = [split identifier];

//    

////    NSLog(@"split name is %@",[split identifier]);

//    

//    NSArray *allviews = [split subviews];

//    

//    if ([splitName isEqualToString:@"split_outer"]) {

//        //1.修改split_outer.topview中控件的大小位置

//        NSView *topView = [allviews objectAtIndex:0];

//        [[self.textViewConsole enclosingScrollView] setFrame:[topView frame]];

//        

//        NSView *bottomView = [allviews objectAtIndex:2];

//        NSSize bottomSize = [bottomView frame].size;

//        NSRect bottomRect = {0,0,bottomSize.width,bottomSize.height};

//        [[self.tableViewProgress enclosingScrollView] setFrame:bottomRect];

//        

//        //2.修改split_outer.bottomview中控件的大小位置

//        NSView *middleView = [allviews objectAtIndex:1];

//        NSRect middleRect = [middleView frame];

//        

//        NSLog(@"x:%f,y:%f,w:%f,h:%f",middleRect.origin.x,middleRect.origin.y,middleRect.size.width,middleRect.size.height);

//        

//        //3. 修改split_outer.middle下拉动时对应其它控件的大小

//        NSPoint point = NSMakePoint(0, 0);

//        [self.splitInner setFrameOrigin:point];

//        [self.splitInner setFrameSize:middleRect.size];

//        

//        NSArray *innerSubViews = [self.splitInner subviews];

//        

//        NSView *leftTableViewOuterView = [innerSubViews objectAtIndex:0];

//        NSSize leftTableViewOuterViewSize = [leftTableViewOuterView frame].size;

//        [[self.leftTableView enclosingScrollView] setFrameSize:leftTableViewOuterViewSize];

//        [[self.leftTableView enclosingScrollView] setFrameOrigin:point];

//        

//        NSView *rightTableViewOuterView = [innerSubViews objectAtIndex:1];

//        NSSize rightTableViewOuterViewSize = [rightTableViewOuterView frame].size;

//        [[self.rightTableView enclosingScrollView] setFrameSize:rightTableViewOuterViewSize];

//        [[self.rightTableView enclosingScrollView] setFrameOrigin:point];

//        

//    } else if([splitName isEqualToString:@"split_inner"]){

//        NSLog(@"xxxxxxx");

//        

//         NSPoint point = NSMakePoint(0, 0);

//        NSArray *innerSubViews = [self.splitInner subviews];

//        

//        NSView *leftTableViewOuterView = [innerSubViews objectAtIndex:0];

//        NSSize leftTableViewOuterViewSize = [leftTableViewOuterView frame].size;

//        [[self.leftTableView enclosingScrollView] setFrameSize:leftTableViewOuterViewSize];

//        [[self.leftTableView enclosingScrollView] setFrameOrigin:point];

//        

//        NSView *rightTableViewOuterView = [innerSubViews objectAtIndex:1];

//        NSSize rightTableViewOuterViewSize = [rightTableViewOuterView frame].size;

//        [[self.rightTableView enclosingScrollView] setFrameSize:rightTableViewOuterViewSize];

//        [[self.rightTableView enclosingScrollView] setFrameOrigin:point];

//

//    }

//}

 

最后设置size inspector

每个view都要设置

 

 http://i.cnblogs.com/Files.aspx

 

原文地址:https://www.cnblogs.com/huibin-benteng/p/4913244.html