影响一个UIView是否能正常显示的几个因素
在使用代码实现UIView及其子类的对象的时候,经常会遇到创建的某个view没有显示在屏幕上。以下总结了本人遇到过的几种情况。可能还有些其它的原因也会导致view不能正常显示,限于个人经历有限,无法全部列出。待今后如果遇到新的情况,再对本文做更新。
首先,最重要的肯定是这个view本身已经分配了内存空间,既已经执行过alloc。虽然这种错误看上去不会有人犯,但在程序结构比较复杂的情况下,有可能某个执行alloc的函数没有被调到,就会导致view本身没有创建,这样当然无法显示。
第二点,就是要确认当前要显示的view是否已经添加到superview中了。由于在编写代码过程中,经常会在superview已经写好的情况下再添加某个新的view,但我就经常会在这时候忘记把新创建的view添加到superview中。而且这个问题不是很容易查找到,因为这个view本身已经创建了,superview也存在,通过debug也难以立即发现问题所在。因此现在如果再发生view无法正常显示的问题,我通常首先查这个问题。
第三,view的hidden属性是否被设为YES。这类问题一般来说还是比较容易找到的。
第四,view的宽度或高度是0;或者view的position不在屏幕范围内。这两个问题都是属于view的frame的问题。虽然一般在查bug的时候不太会第一时间想到这两种情况,但要检查view的frame是否正常还是很容易的。可以直接用断点查属性,也可以将他们的属性log出来。
第五,被其它的view遮挡住。这个问题不是很经常碰到。因为ios的view的背景默认都是白的,所以只要被遮挡的view不是被完全盖住的话,还是能看到一个角落的。如果怀疑有这个情况,可以通过改变view的位置和大小,或者将前面的view隐藏掉,来判断view是不是被遮挡了。
第六,view里面没有内容。这个问题也是需要注意的。因为ios的view默认背景都是白的,所以如果view里面没有内容的话,最终在屏幕上只能看到一片白色,与ios的底色没有区别。要检查这个问题也挺容易,方法和第四点一样。
目前本人遭遇到过的view无法显示的问题,都是由于以上所列原因的其中之一或多个因素共同作用。但是如果是在比较复杂的系统中,可能会有多个UIView嵌套的情况,这时候就需要耐心地一层层检查,保证每一层的view都正常显示。
影响一个UIView是否能正常显示的几个因素的更多相关文章
- iOS----自定义UIView,绘制一个UIView
绘制一个UIVIew最灵活的方式就是由它自己完成绘制.实际上你不是绘制一个UIView,你只是子类化了UIView并赋予子类绘制自己的能力.当一个UIVIew需要执行绘图操作的时,drawRect:方 ...
- 转:iOS绘制一个UIView
绘制一个UIView 绘制一个UIVIew最灵活的方式就是由它自己完成绘制.实际上你不是绘制一个UIView,你只是子类化了UIView并赋予子类绘制自己的能力.当一个UIVIew需要执行绘图操作的时 ...
- 在xib里,拖一个UIView到UITableView中作为tableHeaderView
原贴地址:http://blog.csdn.net/haoxinqingb/article/details/41683881 内容 在xib里,拖一个UIView到UITableView中作为tabl ...
- iOS-xib(使用XIB自定义一个UIView )
1.新建一个xib视图
- 以流方式读写文件:文件菜单打开一个文件,文件内容显示在RichTexBox中,执行复制、剪切、粘贴后,通过文件菜单可以保存修改后的文件。
MainWindow.xaml文件 <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation&q ...
- 自己封装的一个js方法用于获取显示的星期和日期时间
自己封装的一个js方法用于获取显示的星期和日期时间 /** * 获取用于显示的星期和日期时间 * @param date * @returns {string} */ function getWeek ...
- 在vue中下拉框切换事件中改新建表单中的一个值,页面不显示
事件中改新建表单中的一个值,页面不显示,当另一个对象值发生改变时,这个页面上的值才会显示 由于新建表单是弹窗,在弹出时会重新给每个字段重新赋值,在赋值时没给这个字段赋值(常见新加功能时,加了一个字段, ...
- 使用 Android Studio 开发工具创建一个 Android 应用程序,显示一行文字“Hello Android”,并将应用程序的名称更改为“FirstApp”。
需求说明: 使用 Android Studio 开发工具创建一个 Android 应用程序,显示一行文字"Hello Android",并将应用程序的名称更改为"Firs ...
- 【Eclipse】一个简单的 RCP 应用 —— 显示Eclipse 的启动时间。
1 创建一个插件项目 1.1 File - New - Plug-in Project 注: 1 如果 New 下没有 Plug-in Project , 到 Other 里面去找. 2 如上截图的下 ...
随机推荐
- 解决ubuntu下filezilla登录ftp看不到中文目录和文件的问题 (转载)
转自:http://blog.csdn.net/duguteng/article/details/7716283 打开filezilla 文件-站点管理器-新站点--字符集--使用自定义的字符集 ,填 ...
- sqlserver2012——INTERSECT交查询
1. select a.成绩编号,a.分数,b.姓名 From 成绩信息 a,学生信息 b ' 一般的查询 a.成绩编号,a.分数,b.姓名 From 成绩信息 a,学生信息 b ' order a. ...
- codevs3002 石子归并3
3002 石子归并 3 题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安 ...
- codevs1051接龙游戏
1051 接龙游戏
- struts 日期组件
1.组件文件夹 datepicker 一般放在WebRoot/js下. 2.前台页面: 在head里面:引入 <script type="text/javascript" ...
- pgfincore外部OS缓存安装
su - root cd /opt/soft_baktar -zxvf pgfincore-1.0.gz cd pgfincore-b2b53deexport PATH=/opt/pgsql963/b ...
- wcf双工通信
一直以为感觉双工没弄懂,着实觉得很惆怅,在网上了解下双工的一些特点,直接上代码,以便以后项目中用的着: service层: 定义一个IDuplexHello服务接口 [ServiceContract( ...
- Codeforces 163C(实数环上的差分计数)
要点 都在注释里了 #include <cstdio> #include <cstring> #include <iostream> #include <al ...
- applicationContext中普通数据源不用jndi数据源
applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...
- 配置本地和远程maven仓库
<mirrors><mirror> <id>alimaven</id> <name>aliyun maven</name> &l ...