iOS-frame布局浮点数导致对齐问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS-frame布局浮点数导致对齐问题相关的知识,希望对你有一定的参考价值。

一、问题
      某些需求需要用到button 和 label,并且需要同一行对齐,例如某个提示栏,上面有一部分提示文字不可点击,但是有一部分文字可以点击并跳转。因此通过 sizeWithAttributes 或者其他系统方法计算字符串size,然后设置button的大小为对应title计算出来的大小,label对齐button,并且大小设置为对应text字符串的大小,在坐标和大小一样的情况下出现了,字体没对齐的情况:
技术分享
二、复现问题:
       创建一个button 和 一个label,坐标如下:
        <UIButton: 0x7c49ac50; frame = (0 50; 199.131 35.8008); opaque = NO; layer = <CALayer: 0x7c49adb0>>
        <UILabel: 0x7c15efc0; frame = (199.131 50; 199.131 35.8008); text = ‘查查。123查查‘; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7c15f230>>
 
研究一下发现,两个view的y坐标是一样的,输出了背景颜色也没看到两个view背景区域不同,进一步发现当x、y的值也为浮点数的情况下偏差会更大,然后尝试将frame的值通过全部取整后发现两个view对齐了,如下图:
技术分享
 
三、结论
       button 和 label内部对浮点坐标的处理不同,如果需要不同的view对齐的时候,并且使用frame布局的时候,要保证frame的值都是整数。
 
 
 
 
 

以上是关于iOS-frame布局浮点数导致对齐问题的主要内容,如果未能解决你的问题,请参考以下文章

MPI 派生数据类型适用于浮点数,但不适用于双精度数。是对齐问题吗?

c++浮点数的格式化输出

如何将元素左右对齐没有绝对位置或浮点数

如何在 Python 中将浮点数格式化为固定宽度

浮点数二分

js浮点数算术出现多为小数