自定义NavigationBar

GitHub-Demo
有时候会有一些比较奇怪的需求.譬如导航栏上面的title不在中间.(非原生放在中间的),别给我说那种文字颜色字体大小什么的原生不支持(attributedString了解一下).

好了.首先,介绍一下去年WWDC提出的safeLayoutGuide安全区的概念.
这玩意最低支持iOS9.
所谓安全区,基本上下图的绿色框框就概括了
自定义NavigationBar_第1张图片

其他的区域苹果并不建议你把一些Control(UIbutton之类的控件)放在里头.
那么.如果我们想自定义Nav咋办捏.
首先,你的软件最低支持版本号应该不小于9.然后如果是Xib的话(新创建项目默认勾选),把下面的一个勾勾勾选
自定义NavigationBar_第2张图片

大家也知道.UINavigationBar属于原生控件.原生控件的话在某些支持上比较好.(比如iOS11出来的大标题prefersLargeTitles).如果用UIView去写的话呢.又要想到把电池栏遮住.但是不管有没有"耳朵".导航栏Default&&prefersLargeTitles = NO的时候.导航栏高度都是44.这是固定的.我们在上面加什么控件.居中直接就centerY相等于Nav就行.

我们也知道.导航栏有一个毛玻璃(其实我是觉得这个毛玻璃挺好看的,可能大多数App的设计觉得这玩意难看吧).怎么去掉这个毛玻璃.还有上图iPhoneX导航栏上面的那根线呢.


类似于UITabbar.去掉线就是

	nav.shadowImage = [UIImage new];

颜色、穿透、bar的样式如下

	self.barStyle = UIBarStyleDefault;
    [self setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
    //穿透
    self.translucent = NO;

对于我们设计的那个奇怪的需求.就是Controller底部有一个全屏性质的图片.要求是从屏幕顶部开始.但是左边的某个点要对上Nav上的某个点.
如果我们直接写在Controller的View上面的话.由于导航栏是浮动的那么就对不准.那么我们就可以加在导航栏上.

有一点要强调一下.如果是和我这种懒癌一样喜欢用
xx addSubView:xxx
如果你要加按钮,请在最后写,免得被图片盖住
我更加推荐insertSubView的方式.

insert都一样.插入的意思.关键在后面的below和above.
above上面.below是下面,这个要分清楚.

返回按钮回传之类的懒虫可以直接写个Block就OK.

你可能感兴趣的:(UIKit)