在Xib中绘制1像素的线

我们在写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。


再把该约束所属的类改成刚刚写的子类就可以了。
在Xib中绘制1像素的线_第1张图片

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

阅读原文/原文地址

你可能感兴趣的:(在Xib中绘制1像素的线)