不知为何 我在 OS X 10.11.5 及 Xcode 7.3 的 Storyboard 中设置 Tab View Controller 的 Transition 属性时,Tab View Controller 并不能自动根据子 View Controller 的 Preferred Content Size 来动画渐变,因此只能自己实现了(包括 Propagate Title)。

目前的 Storyboard 设置: 
记得关掉 Propagate Title,因为在我的 build 上没有任何用处,而且还影响后面通过 Delegate 手动设置标题。 

Step 1: 
Subclass TabView Controller,这里是JZSettingsTabViewController,加上 NSTabViewDelegate

Step 2: 
实现协议,

- (void)updateWindowSizeWithItem:(NSTabViewItem *)item
{NSWindow *window = self.view.window;NSSize contentSize = item.viewController.preferredMinimumSize;NSSize newWindowSize = [window frameRectForContentRect:(CGRect){CGPointZero, contentSize}].size;NSRect frame = [window frame];frame.origin.y += frame.size.height;frame.origin.y -= newWindowSize.height;frame.size = newWindowSize;[self.view.window setFrame:frame display:YES animate:YES];window.title = item.label;
}

Step 3: 
既然上面是通过 preferredMinimumSize 获取的 Size,那么在子 View Controller 的实现文件里加上这句,这个时候就不要写 Preferred Content Size 了:

- (CGSize)preferredMinimumSize
{return CGSizeMake(500, 400);
}

虽然这样 Size 就不是通过 Storyboard 设置了略嫌麻烦,不过考虑到 TabView Controller 的每个子 VC 都肯定要实现的,也还算可以。 
我这里是因为要写 设置界面 所以用到了 NSTabViewController 并且保持固定的 Window 大小(通过去除 NSResizableWindowMask),如果需要一个可以 Resize 的 Window 同时保持不同 Tab 的大小切换动画,

NSSize contentSize = item.viewController.preferredMinimumSize;

这句可以适当修改,比如修改为当前拉伸后的预期大小。

手动实现 NSTabViewController 的 Rect Transition 及 Propagate Title-b相关推荐

  1. Unity3D - UGUI

    UGUI是Unity4.6开始,Unity自家的GUI系统,已经相当成熟了,其功能和易用性上一点也不逊于NGUI(Unity上一款流行的第三方UI插件). 画布(Canvas) 每一个GUI控件必须是 ...

  2. Python常用的模块的使用技巧

    Python常用模块的使用技巧 目录 Python常用模块的使用技巧 1.Python配置说明 (1)Python注释说明 (2)函数说明 (3)ipynb文件转.py文件 (4)Python计算运行 ...

  3. Vue3过渡动画实现

    一.认识动画 在开发中,我们想要给一个组件的显示和消失添加某种过渡动画,可以很好的增加用户体验: React框架本身并没有提供任何动画相关的API,所以在React中使用过渡动画我们需要使用一个第三方 ...

  4. 【Unity编辑器】UnityEditor多重弹出窗体与编辑器窗口层级管理

    一.简介 最近马三为公司开发了一款触发器编辑器,对于这个编辑器策划所要求的质量很高,是模仿暴雪的那个触发器编辑器来做的,而且之后这款编辑器要作为公司内部的一个通用工具链使用.其实,在这款触发器编辑器之 ...

  5. matlab把图像进行网格化,或者是在图像中画网格

    by:黄光耀 % %%%%%%%%%%%画网格%%%%%%%%%% % %%%%%%%%%%把带瓶盖的托盘完全分割开%%%%%%%%% % close all % clc % clear % %% 读 ...

  6. Vulnhub靶场题解

    Vulnhub简介 Vulnhub是一个提供各种漏洞环境的靶场平台,供安全爱好者学习渗透使用,大部分环境是做好的虚拟机镜像文件,镜像预先设计了多种漏洞,需要使用VMware或者VirtualBox运行 ...

  7. matlab给图像加网格,matlab把图像进行网格化,或者是在图像中画网格

    by:黄光耀 % %%%%%%%%%%%画网格%%%%%%%%%% % %%%%%%%%%%把带瓶盖的托盘完全分割开%%%%%%%%% % close all % clc % clear % %% 读 ...

  8. 深入理解Vue动画原理

    深入讲解 Vue 动画原理 文档 过渡 & 动画 轮播组件slides 轮播难点在于最末位到首位的切换方式,在讲轮播之前需要讲下动画. Vue动画支持很多种不同的方式. Vue动画方式1 - ...

  9. Opencv实现鼠标截图功能

    1.坐标系 首先我们先认识一下opencv的坐标系,我们的图片坐标系都是以左上角为原点,向右和向下形成一个x,y坐标系,表示一张图片的大小就用原点坐标加上图片的宽高即可(0,0,width,heigh ...

最新文章

  1. YOLOv4:目标检测(windows和Linux下Darknet 版本)实施
  2. 人脸识别引擎SeetaFaceEngine中Identification模块使用的测试代码
  3. JavaScript-严格检查模式
  4. java二维数组的常见初始化
  5. 删除 字符串中‘*’号 两端的除外。指针h、p分别指向第一个和最后一个字符
  6. MATLAB矩阵的分解与变换
  7. 【二分】【线段树】hdu6070 Dirt Ratio
  8. python-简单邮件报警
  9. 如何修改Myeclipse的JSP模板
  10. 云优CMS火车头数据采集教程-自动采集发布教程
  11. 全国计算机等级考试——C语言二级 题库
  12. 用c语言莲花,用荷花为寓意的网名-网名搜索
  13. [转帖] 嵌入式系统词汇表
  14. [OCA]认证考试内容
  15. JS中函数的返回值介绍
  16. Spring框架的起源
  17. BeeCloud支付接入视频教程-黄君贤-专题视频课程
  18. 可视门铃全国产化电子元件推荐方案
  19. 牛投客- 股票与股权投资的区别是什么?
  20. 笔记-GPS设备定位方式

热门文章

  1. html中图片连续替换,C# 批量替换html中的图片 示例
  2. 20200714:动态规划复习day05
  3. 20200713:动态规划复习day04
  4. linux可以修改日期格式吗,如何在Linux中使用date命令修改日期时间
  5. 打印出来只有a4纸一半 预览是正常的_还需要去打印店?能随身使用的便携打印机:汉印MT800评测...
  6. 在python中、运算符+不仅可以实现_运算符 - 在python中+ =做到了什么?
  7. extjs实现组织架构图_如何画好一张架构图?(内含知识图谱)
  8. kafka 的structured stream 总结
  9. List列表拒绝添加重复信息
  10. 内含20万“不可描述”图片,这个数据集千万别在办公室打开