ios --xib自定义,解决在导航栏不透明的情况下,自定义xib view高度被压缩64的问题
在使用xib自定义view的时候,个人习惯性的直接使用xib中的约束,所以自然而然的要打开Autolayout。以前在使用的时候没有发现什么问题,最近项目中使用的时候突然发现在导航栏透明的情况下,出现实际的frame比设置的frame高度缩小64的问题,然后上网查找各种博客,最后差点被五花八门的写法带跑偏了,遂简单记录一下正确的解决方式。
自定义方法大致如下:
1、xib 和TestXibView是绑定的
2、xib中如下图:(Autolayout开启的)

3、TestXibView.m中主要代码如下:(是使用等号定义的)
- (instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor redColor];
NSArray *xib = [[NSBundle mainBundle] loadNibNamed:@"TestXibView" owner:nil options:nil];
self = xib.lastObject;//注意这里我使用的是“=”
self.frame = frame;
}
return self;
}
- (void)awakeFromNib{
[super awakeFromNib];
}
问题:
正常情况下在控制器的view中添加TestXibView实例view的时候是没有问题的,
但是当我需要设置导航栏不透明的时候,需要用到这句代码:
self.navigationController.navigationBar.translucent = NO;
这时,问题出现,问题如下:(仅在控制器view是UIView类型的时候才会出现,当xib view添加到滚动视图上时不会有下面的问题)
1、添加的view高度会缩减64
2、同时控制台会打印约束冲突的情况
注意:(亲测automaticallyAdjustsScrollViewInsets,self.extendedLayoutIncludesOpaqueBars,edgesForExtendedLayout这些设置都解决不了这个问题)
解决办法1:(偏门)
最初在没有找到造成这种问题的原因的情况下,我只能把设置frame的相关demo写在这个方法中viewDidLayoutSubviews,虽然用着别扭,但是至少可以临时解决问题。
- (void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
}
解决办法2、关闭Autoresize SubViews(正解)
控制器中的Autoresize SubViews不勾选

或者在viewdidload方法中添加下面代码,也能起到相同的效果:
self.view.autoresizesSubviews = NO;
问题的分析:
其实造成xib view高度缩小64像素以及会打印约束冲突的最根本原因是,我们在Xcode9上创建xib或者storyboard文件时,会默认打开Autoresize SubViews,所以在设置导航栏透明的时候,因为自动重新布局之后导致高度缩小,原来的xib中的约束无效。
既然问题查清楚了,那就对症下药,关闭Autoresize SubViews即可。
其实自己写的代码,出错了,网上的很多办法只能是参考,因为错误的前提或者环境可能差别很大,所以,出现bug时,首先仔细认真的检查自己的代码是否存在问题,在确保没问题(或者自己没有找到问题)的情况下可以去参考网上的一些解决办法。但是最终还是要对症下药,了解病症所在才能真正的解决办法。
其它赘述:当然在xib不绑定TextXibView情况下,直接使用xib,也就是下面的方法
NSArray *arr=[[NSBundle mainBundle]loadNibNamed:@"TestXibView" owner:nil options:nil];
UIView *tmpView = arr.lastObject;
tmpView.frame = CGRectMake(, , , );
[self.view addSubview:tmpView];
ios --xib自定义,解决在导航栏不透明的情况下,自定义xib view高度被压缩64的问题的更多相关文章
- iOS解决隐藏导航栏后,打开照片选择器后导航栏不显示的问题以及更换导航栏背景色
问题描述: 遇到一种情况,在一个控制器上(隐藏了导航栏),打开照片选择器 UIImagePickerController后,照片选择器头部一片空白,且上滑相册时,信息会有错乱效果. 原因分析: 通过查 ...
- iOS 超 Easy 实现 渐变导航栏
接着上周的项目, 在上周我别出心裁的在自定义TabbarController中加入了自定义转场动画, 受到了大家广泛的喜爱, 再次表示感激, 今天我们继续实现LifestyleViewControll ...
- iOS 导航栏 不透明
UINavigationBar.appearance().translucent = false UINavigationBar.appearance().barStyle = UIBarStyle. ...
- iOS 设置导航栏全透明
- (void)viewWillAppear:(BOOL)animated{ //设置导航栏背景图片为一个空的image,这样就透明了 [self.navigationController.navig ...
- self.navigationController.navigationBar.translucent = YES航栏的属性默认 YES是透明效果并且主view不会偏移 NO是导航栏不透明 主view会向下偏移64px
交友:微信号 dwjluck2013 从iOS7开始,苹果对navigationBar进行了模糊处理,并把self.navigationController.navigationBar.translu ...
- 在隐藏导航栏的控制器中,调用UIIMagePickerController,出现导航栏变透明的问题
在隐藏导航栏的控制器中,调用UIIMagePickerController,出现导航栏变透明的问题 解决办法 #pragma mark - UIImagePickerController Delega ...
- IOS开发之Bug--iOS7View被导航栏遮挡问题的解决
在实际开发中,遇到在UITextView的frame等于当前控制器的View的frame的情况下,然后运行的时候,发现控制器的Frame的高度y值会从导航条的位置64变化到0. 导致UITextVie ...
- iOS:自定义工具栏、导航栏、标签栏
工具栏为UIToolBar,导航栏UINavigationBar,标签栏UITabBar.它们的样式基本上时差不多的,唯一的一点区别就是,工具栏一般需要自己去创建,然后添加到视图中,而导航栏和标签栏不 ...
- iOS正确解决隐藏导航栏后push和pop或dismiss和present闪黑问题
情景: 一级页面不显示导航栏 ,二级页面显示导航栏. 方法一 适用于push/pop: 一级页面中 - (void)viewWillAppear:(BOOL)animated { [super vie ...
随机推荐
- python运算符优先级
下面这个表给出Python的运算符优先级,从最低的优先级(最松散地结合)到最高的优先级(最紧密地结合).这意味着在一个表达式中,Python会首先计算表中较下面的运算符,然后在计算列在表上部的运算符. ...
- 第一节 —— vue2.0 环境安装,工程化开发
vue的开发有两种,一种是直接的在script标签里引入vue.js文件即可,这样子引入的话个人感觉做小型的多页面会比较舒坦,一旦做大型一点的项目,还是离不开webpack. 所以另一种方法也就是基于 ...
- UML系统建模的分析和应用
一.基本信息 标题:UML系统建模的分析和应用 时间:2016 出版源:无线互联科技 领域分类:统一建模语言 二.研究背景 问题定义:统一建模语言的分析应用 难点:掌握和理解相关系统的业务环境,掌握良 ...
- 完整的SOPC开发流程体验
课程目标:学习并掌握完整的SOPC开发流程. 开发环境:Quartus15.1 学习内容:1.使用QSYS工具建立能够运行流水灯项目的NIOS II处理器系统 2.在quartus ii中添加NIOS ...
- Instruments Time Profiler时,无法定位代码,如何破?
都是地址符号,往深里也一直是地址符号,根本没法判断是哪些代码的执行时间 解决办法: 选下面的.
- 记录使用 Cake 进行构建并制作 nuget 包
书接上一回(https://www.cnblogs.com/h82258652/p/4898983.html)?[手动狗头] 前段时间折腾了一下,总算是把我自己的图片缓存控件(https://gith ...
- MySQL DDL--ghost执行模板和参数
常用GHOST模板 ##================================================## mysql_ip="127.0.0.1" mysql_ ...
- 微服务应用新趋势:Service Mesh、AIOps和中台化
微服务技术由于天生支持快速迭代.弹性扩展的特点,使企业能够在不确定性下提升发展速度及抗风险能力,受到了越来越多的关注.当前,云服务商纷纷试水微服务产品,最为典型的,当属推出轻舟微服务平台.剑指整个微服 ...
- 「PKUWC2018」随机游走(min-max容斥+FWT)
「PKUWC2018」随机游走(min-max容斥+FWT) 以后题目都换成这种「」形式啦,我觉得好看. 做过重返现世的应该看到就想到 \(min-max\) 容斥了吧. 没错,我是先学扩展形式再学特 ...
- 47_并发编程-线程python实现
一.Threading模块 1.线程的创建 - 方式一 from threading import Thread import time def sayhi(name): time.sleep(2 ...