自定义Window标题栏titleBar

简介: 自定义Window标题栏titleBar

在进行OS X软件开发时,Window自带的标题栏十分简易,往往不能达到我们的需求,如下图:

image.png



在实际开发中,我们需要根据项目的需要对标题栏进行自定义。自定义标题栏主要有如下两种思路:


1.去掉系统的标题栏,使用自定义的View来做标题栏。


2.隐藏系统的标题栏,进行标题栏的透明处理。


上面两种思路中第2种要更好一些,我们可以服用系统的功能按钮,即关闭、最小化和最大化按钮。


   首先,现在Window的contentView中添加一个自定义的View,作为标题栏视图,View上可以添加图标或任意自定义的功能按钮。如下:


image.png


通过如下代码来设置标题栏:


//将系统的标题栏设置透明    

self.window.titlebarAppearsTransparent = YES;

//将系统标题进行隐藏

self.window.titleVisibility = NSWindowTitleHidden;

//设置可以通过拖拽window背景视图进行窗口的移动

[self.window setMovableByWindowBackground:YES];

//设置window的内容部分充满整个窗口

[self.window setStyleMask:[self.window styleMask] | NSWindowStyleMaskFullSizeContentView];

//获取到windows的主视图    

NSView * themeView = self.window.contentView.superview;

//根据层级结构获取到标题栏视图

NSView * titleView = themeView.subviews[1];

titleView.autoresizesSubviews = YES;

//重新对标题栏视图的尺寸进行布局,使得系统的功能按钮出现在自定义标题中的竖直中间

[titleView mas_remakeConstraints:^(MASConstraintMaker *make) {

   make.left.equalTo(@10);

   make.width.equalTo(@70);

   make.top.equalTo(@9);

   make.height.equalTo(@22);

}];

需要注意,上面对标题栏的布局进行了重设,这样是为了让系统的3个功能按钮显示在自定义标题栏的中间,但是当用户使用全屏功能进行全屏与非全屏切换时,系统会对标题栏的尺寸进行重新布局,将功能按钮放回原来的位置,为了避免这样的问题,可以监听用户全屏切换事件,退出全屏时,进行重新布局。


   整体效果如下:

image.png

目录
相关文章
|
Windows
Winform控件优化之背景透明那些事1:Button控件等背景透明
WinForm不支持真正的透明,其控件透明的实现都是背景颜色设置和对应位置的父控件背景相同。 Winform中控件的背景透明只有三种:Button控件的透明、其他控件的透明...
2917 0
Winform控件优化之背景透明那些事1:Button控件等背景透明
|
4月前
自定义Toolbar以及使用
自定义Toolbar以及使用
|
6月前
|
搜索推荐 Android开发
自定义Android标题栏TitleBar布局
自定义Android标题栏TitleBar布局
34 1
|
6月前
|
Java Android开发 Kotlin
Android Dialog 弹出时,隐藏 navigation bar
Android Dialog 弹出时,隐藏 navigation bar
119 1
|
6月前
|
XML Java Android开发
Android控件之基础控件——进度条类的view——TextView、Checkbox复选控件、RadioButton单选控件、ToggleButton开关、SeekBar拖动条、menu、弹窗
Android控件之基础控件——进度条类的view——TextView、Checkbox复选控件、RadioButton单选控件、ToggleButton开关、SeekBar拖动条、menu、弹窗
675 1
|
API Android开发
Android | 通过WindowInsetsController设置系统栏颜色、Behavior、显示隐藏等
两种方式可以引入`WindowInsetsController`,一种直接通过`API`的`val controller = window.decorView.windowInsetsController`获取,注意该方法在`API30`及以上才有
1071 0
解决Toolbar 和状态栏重叠,并且设置Toolbar 的颜色渐变效果
解决Toolbar 和状态栏重叠,并且设置Toolbar 的颜色渐变效果
Dialog和DialogFragment 设置背景透明
Dialog和DialogFragment 设置背景透明
1014 0
toolbar改变返回按钮方法
toolbar改变返回按钮方法
174 0
|
XML 数据格式
自定义Toolbar的一些小技巧
1、改变Toolbar高度(解决图标不垂直居中) 背景:实际使用中,toolbar默认高度有些大,会挤压内容。想将toolbar高度改小,将layout_height从wrap_content改为固定值。 情况:toolbar的layout_height比默认高度小的时候,发现标题是居中的,但是两侧的图标不垂直居中而偏下了 调查:网上有很多方法,基本都是无效的。甚至有人利用反射直接修改图标的imageview的gravity,非常复杂且右侧图标无法实现。
245 0