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


效果图


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值