如何创build一个0.5像素的线宽

在iOS 7中,表视图的分隔线比以前的ios更薄,看起来像是0.5 px的宽度。

我需要使用一个类似的分隔线(仅垂直)分割一个单元格,我希望这条线的宽度与普通的分隔线相同。

所以我想知道什么是最好的方式来添加这样一个线?

如果我使用UIView并将其宽度设置为0.5它将不可见,如果我将其宽度设置为1.0,当然我会得到1.0px而不是0.5px的线宽。

我试图使用一个1.0像素的视网膜大小的资源,但它没有工作…

您将宽度设置为0.5 – 或者使其始终为1像素,然后将其设置为(1.0 / [UIScreen mainScreen].scale)

我以前做过,它工作得很好

我认为你看不到它的原因是你正在屏幕中间准确定位线条,这会使线条的原点(320 – 0.5)/ 2.0,X原点为159.75 – 0.75可能是搞乱了事情 – 或者单元格正在移除你的视图的背景颜色

我做了这个步骤:

  1. 用1px高度创build一个约束
  2. 连接约束与IBOutlet(文件.m)
  3. 将ViewDidLoad中约束的常量改为0.5

这个对我有用。

假设你使用Storyboard进行单元格布局:

放置一个你想要的高度和1px宽度的UIView到你的单元格中。 给它无论你会喜欢它的背景颜色。 标准分隔符的颜色是大约。 RGB(200199204)。

然后创build一个UIView的子类,例如HairlineView并重写awakeFromNib()

 -(void)awakeFromNib { self.layer.borderColor = [self.backgroundColor CGColor]; self.layer.borderWidth = (1.0 / [UIScreen mainScreen].scale) / 2; self.backgroundColor = [UIColor clearColor]; } 

您正在围绕1px宽的视图绘制边框,宽度为2 * 0.25px,使其总宽度为0.5px,这是要实现的宽度,然后通过将背景设置为清除来隐藏视图的背景。 这最后一步是重要的,它不会没有工作。

将你的视图的types设置为HairlineView,然后它应该工作。

当以编程方式进行时,你必须重写一个不同的方法,例如initWithFrame()也许,因为只有当你从Storyboard布局创build视图时才会调用awakeFromNib()。

上面的一些答案已经是正确的,但只是一个更新: 在Xcode 8,现在你可以设置一个十进制数的布局约束的常量 。 不再需要通过用户定义的运行时属性连接IBOutlet或设置常量。

十进制常量

你可以在故事板height 0.5f设置约束; 它将不会被直接看到,但是它在屏幕截图中显示的约束列表下可见 在这里输入图像说明

您可以使用Core Graphics绘制渐变:

 UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 1.0f)]; CAGradientLayer *gradient = [CAGradientLayer layer]; gradient.frame = view.bounds; gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor], (id)[[UIColor blackColor] CGColor], nil]; [view.layer insertSublayer:gradient atIndex:0]; 

你可以用十进制数来设置布局约束的常量,但是UIBuilder在Xcode 8中有一些bug

我的解决scheme

  1. 通过源代码打开xib文件
  2. find你的布局约束常数,并改为0.5

我的解决scheme

  1. 创build一个视图,为视图设置一个约束:“height = 0px”,转到“身份检查器”并将该约束的优先级编辑为750。

  2. 然后select视图并单击“pin”button,为此视图添加另一个约束:“height = 0.5”,优先级为1000.在“Identity Inspector”中,您可以看到第二个约束自动变为“height> = 0.5”

适用于Xcode 7.3.1

你把视图放在你的细胞底部。 并将其设置为视图的深色。 并将其高度设置为0.5PX。 你可以得到它的每个单元格的分隔符。根据单元格宽度保持其宽度。

而不是尝试根据分隔符样式设置视图高度。删除分隔符。 将单元格分隔符样式设置为StyleNone。
然后在单元格的中间和底部添加两个高度为0.5或1像素的视图。现在它们看起来都是相同的并且具有分隔符样式。

整蛊方式:

  1. 在storyboard或xib中,为线高度约束设置一个唯一的值(例如123)
  2. 用文本编辑器打开故事板或xib
  3. 用0.5replace唯一值(例如123)

您可以在Xcode 8 / iOS 10中以下列方式解决此问题,而不使用约束:

  1. 使用Interface Builder在故事板中添加一个UIView。 根据你的设置设置这个属性,只是为了让你的单元格看起来如何(即height = 44,width = 1)。 此时,宽度是否大于所需的宽度(即0.5)并不重要。

  2. 在你的视图控制器(例如,UIView * splitLine)中为这个视图创build一个IBOutlet。

  3. 在视图控制器的viewWillAppear:方法中添加以下方法:

[self.splitLine setFrame:CGRectMake(x,y,0.5,44)];

在这种方法中,您将分隔线的宽度指定为0.5,并将高度指定为所需的任何值。 这些值将覆盖故事板中指定的值。