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

来源:互联网 发布:延时摄影编辑软件 编辑:程序博客网 时间:2024/06/07 22:57

本例子实现在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


效果图


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