NSSplitView控件上下拖动时窗口自适应调整 样例

本例子实现在NSSplitview控件上下拖动或左右拖动时 两个子窗口自动调整的按钮

下载样例代码

//  AppDelegate.h
//  Cocoa_SplitView

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate,NSSplitViewDelegate>

@property (assign) IBOutlet NSTextView *textView;
@property (assign) IBOutlet NSSplitView *splitView;
@property (assign) IBOutlet NSTableView *tableView;
@property (assign) IBOutlet NSButton *button;

@property (assign) IBOutlet NSWindow *window;

- (IBAction)dosome:(id)sender;

@end


//
//  AppDelegate.m
//  Cocoa_SplitView
#import "AppDelegate.h"

@implementation AppDelegate
@synthesize textView = _textView;
@synthesize splitView = _splitView;
@synthesize tableView = _tableView;
@synthesize button = _button;

- (IBAction)dosome:(id)sender
{
    NSSize size = {50,50};
    [[self.textView enclosingScrollView] setFrameSize:size];
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
}

- (void) splitViewWillResizeSubviews:(NSNotification *)notification
{
    NSLog(@"splitViewWillResizeSubviews");
}

- (void) splitView:(NSSplitView *)splitView resizeSubviewsWithOldSize:(NSSize)oldSize
{
    NSLog(@"resizeSubviewsWithOldSize");
}

- (BOOL) splitView:(NSSplitView *)splitView shouldAdjustSizeOfSubview:(NSView *)view
{
    NSLog(@"shouldAdjustSizeOfSubview");
    return YES;
}

- (void) splitViewDidResizeSubviews:(NSNotification *)notification
{
    NSLog(@"splitViewDidResizeSubviews");
    NSRect rect = [self.splitView frame];
    NSLog(@"nssplitview %f,%f,%f,%f",rect.origin.x,rect.origin.y,rect.size.width,rect.size.height);
    
    NSArray *subviews = [self.splitView subviews];
    
    NSView *topView = [subviews objectAtIndex:0];
    NSRect trect = [topView frame];
    NSLog(@"top view %f,%f,%f,%f",trect.origin.x,trect.origin.y,trect.size.width,trect.size.height);
    
    [[self.textView enclosingScrollView] setFrame:trect];
    
    NSView *bottomView = [subviews objectAtIndex:1];
    NSRect brect = [bottomView frame];
    NSPoint point = {0,0};
    NSRect lbrect = {point,brect.size};
    [[self.tableView enclosingScrollView] setFrame:lbrect];
    
    NSLog(@"bottom view %f,%f,%f,%f",brect.origin.x,brect.origin.y,brect.size.width,brect.size.height);
    
}

@end


注意:

1.在nssplitview控件的属性中一定不能钩选择“USE Autolayout”否则在委托处理中的逻辑将失效

2.nssplitview的委托一定要设置为appdelegate


NSSplitView控件上下拖动时窗口自适应调整 样例_第1张图片


有用资源:http://www.cocoabuilder.com/archive/cocoa/326128-nssplitview-not-resizing-subviews-if-delegate-is-used.html

你可能感兴趣的:(cocoa,Object-C,NSSplitview)