在使用代码实现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是否能正常显示的几个因素的更多相关文章

  1. iOS----自定义UIView,绘制一个UIView

    绘制一个UIVIew最灵活的方式就是由它自己完成绘制.实际上你不是绘制一个UIView,你只是子类化了UIView并赋予子类绘制自己的能力.当一个UIVIew需要执行绘图操作的时,drawRect:方 ...

  2. 转:iOS绘制一个UIView

    绘制一个UIView 绘制一个UIVIew最灵活的方式就是由它自己完成绘制.实际上你不是绘制一个UIView,你只是子类化了UIView并赋予子类绘制自己的能力.当一个UIVIew需要执行绘图操作的时 ...

  3. 在xib里,拖一个UIView到UITableView中作为tableHeaderView

    原贴地址:http://blog.csdn.net/haoxinqingb/article/details/41683881 内容 在xib里,拖一个UIView到UITableView中作为tabl ...

  4. iOS-xib(使用XIB自定义一个UIView )

    1.新建一个xib视图

  5. 以流方式读写文件:文件菜单打开一个文件,文件内容显示在RichTexBox中,执行复制、剪切、粘贴后,通过文件菜单可以保存修改后的文件。

    MainWindow.xaml文件 <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation&q ...

  6. 自己封装的一个js方法用于获取显示的星期和日期时间

    自己封装的一个js方法用于获取显示的星期和日期时间 /** * 获取用于显示的星期和日期时间 * @param date * @returns {string} */ function getWeek ...

  7. 在vue中下拉框切换事件中改新建表单中的一个值,页面不显示

    事件中改新建表单中的一个值,页面不显示,当另一个对象值发生改变时,这个页面上的值才会显示 由于新建表单是弹窗,在弹出时会重新给每个字段重新赋值,在赋值时没给这个字段赋值(常见新加功能时,加了一个字段, ...

  8. 使用 Android Studio 开发工具创建一个 Android 应用程序,显示一行文字“Hello Android”,并将应用程序的名称更改为“FirstApp”。

    需求说明: 使用 Android Studio 开发工具创建一个 Android 应用程序,显示一行文字"Hello Android",并将应用程序的名称更改为"Firs ...

  9. 【Eclipse】一个简单的 RCP 应用 —— 显示Eclipse 的启动时间。

    1 创建一个插件项目 1.1 File - New - Plug-in Project 注: 1 如果 New 下没有 Plug-in Project , 到 Other 里面去找. 2 如上截图的下 ...

随机推荐

  1. GoWeb开发_Iris框架讲解(一)

    Golang介绍 Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软 ...

  2. 洛谷P1976 鸡蛋饼(Catalan数)

    P1976 鸡蛋饼 题目背景 Czyzoiers 都想知道小 x 为什么对鸡蛋饼情有独钟.经过一番逼问,小 x 道出 了实情:因为他喜欢圆. 题目描述 最近小 x 又发现了一个关于圆的有趣的问题:在圆 ...

  3. 洛谷P3646 [APIO2015]巴厘岛的雕塑(数位dp)

    传送门 话说莫非所有位运算都可以用贪心解决么……太珂怕啦…… 一直把或运算看成异或算我傻逼…… 考虑从高位到低位贪心,如果能使答案第$i$位为0那么肯定比不为$0$更优 然后考虑第$i$位是否能为$0 ...

  4. Codeforces Round 56-B. Letters Rearranging(思维)

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  5. jquery扩展方法详解

    http://www.jb51.net/article/51079.htm https://www.cnblogs.com/xuxiuyu/p/5989743.html     ---更详细

  6. springboot集成log4j

    需求: 1.springboot集成log4j 2.mybatis 打印 sql 实现: pom.xml <dependency> <groupId>org.springfra ...

  7. 转 db_file_multiblock_read_count

    http://www.laoxiong.net/table_scan_and_buffer_cache.html 全表扫描与buffer cache https://www.cnblogs.com/R ...

  8. E. Mike and Foam 容斥原理

    http://codeforces.com/problemset/problem/548/E 这题是询问id,如果这个id不在,就插入这个id,然后求a[id1] ,  a[id2]互质的对数. 询问 ...

  9. 滚动条插件mCustomScrollbar

    1. 参考网站 http://www.wufangbo.com/mcustomscrollbar/ 2. 使用方法

  10. Unity的stateMachineBehaviour

    Unity5新增的StateMachineBehaviour是对状态机的内置,确实方便了很多,这里记录它的两个问题: 1.如果正在执行的状态被打断,当前状态的OnStateExit不会被执行,该问题在 ...