iPhone6 Plus上面神秘的缝隙

发布于 2025-03-25 21:13 803 字 5 min read

前端项目通过bridge获取客户端资源,客户端直接返回response对象常用代码模板1——基础算法常用代码模板2——数据结构统计iOS工程代码行数高数概念、公式、定理Objective-C 语法 3Objective-C 语法 2Objective-C 语法 1UIViewController 的生命周期UITableview调用reload方法时抖动问题UILabel中文带行间距的处理,限制行数,计算高度等UIButton扩大点击范围以及关于响应者链条的思考UIApplicationSwiftUI基本控件iPhone6 Plus上面神秘的缝隙iPhone 刘海机型UI适配(X、Xs、Xs Max、Xr)iOS:如何在UITableView调用reloadData刷新结束后再同步执行后续操作iOS 截取整个 scrollview 图片iOS 关于 UITextField 的字数限制Objective-C 中禁止调用指定的方法objc源码分析-runtime-classObjective-C Type EncodingsObjective-C:为什么分类中不能直接添加属性OC优缺点以及常见bugruntime——运行时简单使用当对象接收到不能处理的消息时调用的方法浅谈iOS中的weak为 UIControl 实现线程安全的 Block 事件扩展:原理与实践OC单例宏iOS常用数据类型转换OC中nil 、NULL、 Nil 、NSNull的区别Description方法和NSLog函数Block in Objective-CiOS自动化埋点的实现iOS平台编译Ogre游戏引擎库iOS:特殊符号大全iOS 网络小结iOS 沙盒与 BundleiOS 框架学习-AsyncSocketNSString的各种处理Swift Module 如何被全局引用CocoaPods组件化——OC/Swift动静态库混用COCOAPODS技巧-创建私有仓库关于NSNotificationCenter数据结构与算法解析习题2.23数据结构与算法解析习题2.19数据结构与算法解析习题2.16数据结构与算法解析习题2.14数据结构与算法解析习题2.13数据结构与算法解析习题2.12数据结构与算法解析习题2.11:二分查找数据结构与算法解析习题2.10:霍纳法则(Horner's rule)数据结构与算法解析习题2.7数据结构与算法解析习题1.3数据结构与算法解析习题1.2数据结构与算法解析习题1.1LeetCode 486 Predict the Winner(预测赢家)LeetCode 398 随机数索引LeetCode 106 Construct Binary Tree from Inorder and Postorder Traversal(由中序和后序遍历建立二叉树)LeetCode 70 爬楼梯(青蛙跳台阶)LeetCode 8 String to Integer (atoi)LeetCode 6 ZigZag Conversion(Z字转换)LeetCode 5 Longest Palindromic Substring(最长回文字串)iOS脚本打包 ipa(.app转.ipa)《什么是数学 》习题 第一章 补充《什么是数学 》习题 第一章 2 数系的无限性 数学归纳法《什么是数学 》习题 第一章 1 整数的计算Vue 的一些指令和缩写
前几天写了个小模块,测试测出来一个UI上面的 bug,只在6plus/6s plus上才出现的问题,如图 上面的白色区域是一个view,中间白色重置和红色确定按钮是一个view,下面灰色区域是一个view,简单来说就是分上中下三个view,但是这三个view的衔接出现了问题,使得每个view之间重

前几天写了个小模块,测试测出来一个UI上面的 bug,只在6plus/6s plus上才出现的问题,如图:

17001895652349.jpg
17001895652349.jpg

上面的白色区域是一个view,中间白色重置和红色确定按钮是一个view,下面灰色区域是一个view,简单来说就是分上中下三个view,但是这三个view的衔接出现了问题,使得每个view之间重现了一道缝隙.

看到这个bug后我重新看了一下我当时写的那块代码,中间view和下面的view的Y值是通过CGRectGetMaxY(上个view.frame)来获得的,也就是拿到了上一个view的最大的Y值来当做当前view的Y值,按理说应该是无缝连接的,事实上也的确是无缝连接,只是在plus机型上出现了问题.

然后我把机器连在电脑上跑起来项目通过xcode的Debug View Hierarchy看了一下这块的UI,让人震惊的事情发生了,用xcode把这块UI放大很多倍后,看到这三个view之间严丝合缝,一点问题都没有!

那么这到底是怎么个情况呢?可以确定不是代码计算的问题了,那为什么会有缝隙呢?看来是手机硬件相关的问题了.虽然知道代码是没有问题的,但是我们可以通过代码来解决这个问题的,比如上移一个点.后来发现个更省事的方法,就是把中间和下面的view的Y值强转成整形,然后这两条神秘的缝隙就消失了,其实这也是用了上移像素的原理,也就是说我还是上移中间和下面view的Y值了.

进而发现原来出现缝隙是因为上个view的最大的Y值是xxx.5,然后经过不严谨的分析可能因为在plus机型上pt:px是3

,而真实显示在手机上的时候像素又按1080 / 1242的比例压缩了一下,再加上苹果可能在plus机型上对于不够1像素的颜色处理出现了差异,导致不够1像素的位置(Y值)显示到屏幕上被强制加了1个像素(纯粹瞎想,如果有更懂的大神请告知真实原因),所以中间和下面的view都出现了缝隙.

总结

,所以view之间的衔接尽量不要出现浮点数,或者在两个view的衔接处重叠1pt,目前看来这样就不会出现空隙了.

前几天又发现了一个新的问题,用系统控件一般情况是不会出现frame除不尽出现白边的,看来是系统做过优化了,但是呢,如果view的clipstobounds属性是yes的话 就会出现 ..看来是clipstobounds把系统优化的跟剪切了,然后上面的说的三个View之间的缝隙问题,可能是UICollectionView本身的优化不到位吧..一切仅是猜测,如果到时候出现问题了可以从这两个方面入手.