如何创建0.5像素的线宽

Eya*_*yal 34 iphone objective-c uitableview ios

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

我需要用一个相似的分隔线(仅垂直)将单元格拆分为2,我希望这条线与常规分隔线的宽度相同.

所以我想知道添加这样一条线的最佳方法是什么?

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

我尝试使用视网膜大小为1.0px的资源,但它没有效果......

Som*_*Guy 24

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

我以前做过这个,它运行良好

我认为你无法看到它的原因是你正确地将线条居中放在屏幕中间,这将使得线条的原点(320 - 0.5)/ 2.0,是X原点159.75 - 0.75可能是搞砸了 - 或者单元格正在删除视图的背景颜色


ant*_*yqz 24

我做了这个步骤:

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

这个对我有用.

  • 当你设置0.5 pt时,\ @ 1x-和\ @ 3x-devices会发生什么?它将尝试显示0.5px用于\ @ 1x(非视网膜),这是不可能的,而对于iPhone Plus模型则为1.5px,这也是不可能的..它是否可以达到1px和2px,或者低至0px 1px的?会出现抗锯齿问题吗?例如毛刺/滞后/闪烁线? (3认同)
  • 是的,因为您必须等待创建所有约束然后更新它. (2认同)

Iri*_*siu 14

假设您使用Storyboards进行单元格布局:

将具有所需高度和1px宽度的UIView放入您的单元格中.给它你想要的任何背景颜色.标准分色器颜色约为.RGB(200199204).

然后创建UIView的子类,例如HairlineView和覆盖awakeFromNib()

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

    self.backgroundColor = [UIColor clearColor];
}
Run Code Online (Sandbox Code Playgroud)

您在1px宽视图周围绘制边框,宽度为2*0.25px,总计为0.5px,这是您想要达到的宽度,然后通过将背景设置为清除来隐藏视图的背景.最后一步很重要,没有它就行不通.

将视图类型设置为HairlineView,然后它应该工作.

以编程方式执行此操作时,您必须覆盖其他方法,例如,initWithFrame()可能,因为只有在从Storyboard布局创建视图时才会调用awakeFromNib().

  • 无需将1.0宽度除以2。这将使线条的颜色比预期的浅。在iOS 8及更高版本上,正确的方法是使用`=(1.0 / [UIScreen mainScreen] .nativeScale)。这将给出:1x设备为1pt(和1px),2x设备为0.5pt(和1px),3x下采样设备(6 plus,7 plus ...)和0.33 pt(和1px)为0.38pt(和1px)。适用于3倍设备(iPhone X)。 (2认同)

kie*_*tux 11

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

十进制常数

  • 曾经为我工作过一段时间,但现在它将它舍入为零(xCode 8.3.3) (2认同)

And*_*kov 7

您可以使用十进制数设置布局约束的常量,但是UIBuilder在Xcode 8,9,10中有一些错误

我的解决方案

  1. 按源代码打开xib文件 在此输入图像描述]
  2. 找到布局约束的常量并更改为0.5 在此输入图像描述


Kir*_*odi 0

您将视图放在底部的单元格中。并将其设置为视图的深色。并将其高度设置为 0.5 PX。您可以获取其中每个单元格的分隔符。根据单元格宽度保持其宽度。