众所周知,表视图分隔符非常薄而且美观.有时我们必须在storyboard或nib中构建一些分隔线,最小数量为1,但实际上该线看起来比我们预期的要厚得多.
我的问题是如何在故事板中绘制1px线?
我是iOS故事板的新手,谁能告诉我如何创建0.5像素宽的线?我已经阅读过这篇文章:如何创建0.5像素的线宽,我知道如何通过编码来实现它,但是它有更简单的方法,比如使用故事板吗?
我想知道绘制单点线的最佳方法是什么?我的目标是在tableViewCell中绘制这一行,使其看起来就像本机单元格分隔符.我不想使用原生分隔符,因为我想制作不同的颜色和不同的位置(不是底部..).
起初我使用1px UIView并将其涂成灰色.但在Retina显示器中它看起来像2px.还尝试使用此方法:
- (void)drawLine:(CGPoint)startPoint endPoint:(CGPoint)endPoint inColor:(UIColor *)color {
CGMutablePathRef straightLinePath = CGPathCreateMutable();
CGPathMoveToPoint(straightLinePath, NULL, startPoint.x, startPoint.y);
CGPathAddLineToPoint(straightLinePath, NULL, endPoint.x, endPoint.y);
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = straightLinePath;
UIColor *fillColor = color;
shapeLayer.fillColor = fillColor.CGColor;
UIColor *strokeColor = color;
shapeLayer.strokeColor = strokeColor.CGColor;
shapeLayer.lineWidth = 0.5f;
shapeLayer.fillRule = kCAFillRuleNonZero;
[self.layer addSublayer:shapeLayer];
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,它在60%的时间里工作..它有什么问题吗?无论如何,我很高兴听到更好的方式.
谢谢.
我知道我们在点而不是像素上操作,在大多数情况下它很方便,但我需要使UIView为1像素而不是2像素高度.因此,如果您在Interaface构建器中拖放一些UIView(分隔线),并使其高度为1px(点),那么它仍然看起来像视网膜屏幕上的2像素大小线(在设备和模拟器上).
我知道视图上有contentScaleFactor属性,它显示的是视网膜(2.0f)与否(1.0f).看起来这些视图的值为1.0f,因此您需要从主屏幕中检索它:
[UIScreen mainScreen].scale;
Run Code Online (Sandbox Code Playgroud)
这让我回归2.0f.现在,我为此分隔符视图添加了高度约束,添加了检查isRetina的方法并将该行划分为1个像素:
- (void)awakeFromNib{
[super awakeFromNib];
CGFloat isRetina = ([UIScreen mainScreen].scale == 2.0f) ? YES : NO;
if (isRetina) {
self.separatorViewHeightConstraint.constant /= 2;
}
}
Run Code Online (Sandbox Code Playgroud)
这有效,我只是不确定使用0.5值是个好主意......
在故事板中有一个UIView,具有约束例如"0.1"比例高度.
想象一下,对于许多不同场景中的视图,您有类似的约束"0.1".
假设您要将值更改为0.1到0.975.
你必须在任何地方单独改变它.
有没有办法使用@IBInspectable和/或约束来形成一种"全局价值"?
这样您就可以立即更改所有内容,并在故事板中同时查看结果.
(当然,在运行时你可以在代码中传播它们.但最好在故事板上看到它.)
请注意,Wain的解决方案可以完美地运行:您可以设置一次值,并影响应用程序中的任何位置.但不幸的是,它只在运行时才这样做,你没有在故事板上看到它.