美文网首页macOS开发
macOS开发-NSSplitView

macOS开发-NSSplitView

作者: ForgetSou | 来源:发表于2020-11-04 16:17 被阅读0次

    一. 简述

    拆分视图,在水平或垂直运行的线性堆栈中排列两个或多个视图的视图。

    默认为水平方向

    @interface NSSplitView : NSView
    

    二. 官方属性方法

    // 代理
    @property (nullable, weak) id<NSSplitViewDelegate> delegate;
    
    - (BOOL)splitView:(NSSplitView *)splitView canCollapseSubview:(NSView *)subview; // 是否允许用户可以折叠和展开指定子视图
    - (void)splitView:(NSSplitView *)splitView resizeSubviewsWithOldSize:(NSSize)oldSize; // 子视图按自定义大小
    - (void)splitViewWillResizeSubviews:(NSNotification *)notification;// 即将调整子视图大小时的通知委托
    - (void)splitViewDidResizeSubviews:(NSNotification *)notification;// 调整子视图大小时的通知委托
    - (BOOL)splitView:(NSSplitView *)splitView canCollapseSubview:(NSView *)subview;// 是否调整子视图的大小
     
    - (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex; // 允许委托人在用户拖动分隔线时限制其最小坐标限制。
    - (CGFloat)splitView:(NSSplitView *)splitView constrainMaxCoordinate:(CGFloat)proposedMaximumPosition ofSubviewAt:(NSInteger)dividerIndex; // 允许委托人在用户拖动分隔线时限制其最小坐标限制。
    - (CGFloat)splitView:(NSSplitView *)splitView constrainSplitPosition:(CGFloat)proposedPosition ofSubviewAt:(NSInteger)dividerIndex; // 允许代表将分隔线限制在某些位置。
    
    // 子视图
    @property BOOL arrangesAllSubviews API_AVAILABLE(macos(10.11)); // 是否将所有子视图排列为拆分窗格
    @property (readonly, copy) NSArray<__kindof NSView *> *arrangedSubviews API_AVAILABLE(macos(10.11)); // 拆分视图作为拆分窗格排列的视图数组
    - (void)addArrangedSubview:(NSView *)view API_AVAILABLE(macos(10.11));// 添加拆分窗格
    - (void)insertArrangedSubview:(NSView *)view atIndex:(NSInteger)index API_AVAILABLE(macos(10.11)); // 将拆分窗格插入到指定的索引处
    - (void)removeArrangedSubview:(NSView *)view API_AVAILABLE(macos(10.11));// 删除已排列的拆分窗格
    - (void)adjustSubviews; // 调整子视图大小
    - (BOOL)isSubviewCollapsed:(NSView *)subview;// 返回是否处于折叠状态
    - (NSLayoutPriority)holdingPriorityForSubviewAtIndex:(NSInteger)subviewIndex API_AVAILABLE(macos(10.8)); // 调整子视图大小时,返回宽度或高度的优先级
    - (void)setHoldingPriority:(NSLayoutPriority)priority forSubviewAtIndex:(NSInteger)subviewIndex API_AVAILABLE(macos(10.8)); // 设置子视图优先级
    @property (nullable, copy) NSSplitViewAutosaveName autosaveName API_AVAILABLE(macos(10.5)); // 系统自动保存拆分视图的分隔器配置时使用的名称。
    
    // 拆分视图方向
    @property (getter=isVertical) BOOL vertical; // 确定拆分视图分割线方向
    @property NSSplitViewDividerStyle dividerStyle API_AVAILABLE(macos(10.5)); // 分割线样式,如下
    typedef NS_ENUM(NSInteger, NSSplitViewDividerStyle) {
        NSSplitViewDividerStyleThick = 1,
        NSSplitViewDividerStyleThin = 2,
        NSSplitViewDividerStylePaneSplitter API_AVAILABLE(macos(10.6)) = 3,
    } API_AVAILABLE(macos(10.5));
    @property (readonly, copy) NSColor *dividerColor API_AVAILABLE(macos(10.5)); // 分割线颜色
    @property (readonly) CGFloat dividerThickness; // 分割线厚度
    - (void)drawDividerInRect:(NSRect)rect; // 绘制分割线
    
    // 限制拆分位置<左右(或上下)可滑动区域>
    - (CGFloat)minPossiblePositionOfDividerAtIndex:(NSInteger)dividerIndex API_AVAILABLE(macos(10.5)); // 索引处最小位置 
    - (CGFloat)maxPossiblePositionOfDividerAtIndex:(NSInteger)dividerIndex API_AVAILABLE(macos(10.5)); // 索引处最大位置
    - (void)setPosition:(CGFloat)position ofDividerAtIndex:(NSInteger)dividerIndex API_AVAILABLE(macos(10.5)); // 设置分割线在指定索引处的位置
    

    三. 示例<代码>

    使用代码创建NSSplitView,想要用Storyboard创建的自行研究,比较简单

    - (NSSplitView *)splitView {
        if (!_splitView) {
            _splitView = [[NSSplitView alloc] initWithFrame:CGRectMake(10, 100, 600, 400)];
            _splitView.delegate = self;
            _splitView.vertical = YES;
            _splitView.dividerStyle = NSSplitViewDividerStylePaneSplitter;
            _splitView.wantsLayer = YES;
            _splitView.layer.backgroundColor = NSColor.whiteColor.CGColor;
            _splitView.toolTip = @"代码创建SplitView";
        }
        return _splitView;
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do view setup here.
        self.view.wantsLayer = YES;
        self.view.layer.backgroundColor = NSColor.lightGrayColor.CGColor;
        
        [self addSplitView];
    }
    
    - (void)addSplitView {
        NSView *leftView = [[NSView alloc] initWithFrame:CGRectMake(0, 0, 100, 400)];
        [self.splitView addArrangedSubview:leftView];
        
        NSView *rightView = [[NSView alloc] initWithFrame:CGRectMake(100, 0, 500, 400)];
        [self.splitView addArrangedSubview:rightView];
        
        [self.view addSubview:self.splitView];
    }
    
    - (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex {
        return 100;
    }
    
    - (CGFloat)splitView:(NSSplitView *)splitView constrainMaxCoordinate:(CGFloat)proposedMaximumPosition ofSubviewAt:(NSInteger)dividerIndex {
        return 200;
    }
    
    /// 能否折叠子视图
    - (BOOL)splitView:(NSSplitView *)splitView canCollapseSubview:(NSView *)subview {
        return YES;
    }
    

    相关文章

      网友评论

        本文标题:macOS开发-NSSplitView

        本文链接:https://www.haomeiwen.com/subject/oxvgvktx.html