在Xib中绘制1像素的线

作者: RanGang | 来源:发表于2016-08-23 14:56 被阅读362次

    我们在写UI界面的时候有时会需要绘制一根 1pixel 的线来充当分隔线,类似UITableView 各个 cell 之间的分隔线。通常我们可以通过添加一个 view 来实现,如果是横线,就设定这个view 的高度为 1pexil,如果是竖线,就设其宽度为 1pixel,注意此处的单位是 pixel,即像素。由于在 retina 屏幕中,iOS坐标系中的一个点(point)的大小并不等于1个像素,在4/4s、5/5s、6/6s中,1point == 2pixel,而在 6plus/6splus 上,1point == 3pixel,因此实际上我们想要绘制 1pixel 的线,需要设置的高度和宽度是0.5或者 1/3,也就是 < 1的。这在代码布局中很好办到,直接写上小数就可以了。但是在 xib 中,这就是一个问题了,因为 xib 中设置宽高,或者约束的时候,即使输入小数,系统也会自动给我们四舍五入,转换成整数,这就给我们设置 1pixel 的线带来了麻烦。
    我在 Google 中查了一下这个问题,最终找到了一个相对简单的解决方案:

    首先创建 NSLayoutConstraint 的子类 NSLayoutConstraintOnePixelLine

    // NSLayoutConstraintOnePixelLine.m
    #import"NSLayoutConstraintOnePixelLine.h"
    @implementation NSLayoutConstraintOnePixelLine
    
    - (void)awakeFromNib { 
      [super awakeFromNib]; 
      if (self.constant == 1) { 
        self.constant = 1 / [UIScreen mainScreen].scale; 
      }
    }
    @end
    

    然后给我们想要设置为 1pixel 的 view 设置上约束,大小为 1。


    再把该约束所属的类改成刚刚写的子类就可以了。

    用这种方法,通过修改代码中的 constant 属性的值,我们就可以任意修改其他约束的值。

    阅读原文/原文地址

    相关文章

      网友评论

        本文标题:在Xib中绘制1像素的线

        本文链接:https://www.haomeiwen.com/subject/uzxnsttx.html