9
self.layer.borderWidth = 0.5;

在视网膜屏幕上UIButtonUITextField渲染良好,但在非视网膜屏幕上,只有顶部和左侧边框呈现,而右侧和底部边框不呈现。

我认为它与屏幕的 dpi 以及如何绘制子点线有关,但可能有更好的解释。

问题: 我想知道是否可以在设置为UIView的视网膜和非视网膜屏幕上按预期显示 a 边框的所有侧面。borderWidth0.5

4

2 回答 2

9

如果您总是想要一条像素(而不是点)线,则必须根据屏幕的比例使用不同的边框宽度。

例如:

CGFloat scale = [[UIScreen mainScreen] scale];
if (scale == 2.0)  { 
    // retina screen;
    self.layer.borderWidth = 0.5;
} else {
    // non-retina screen
    self.layer.borderWidth = 1.0;
}
于 2013-06-12T21:34:24.563 回答
5

现在支持多个比例(@3x),最好将马特的答案写成这样:

CGFloat scale = [[UIScreen mainScreen] scale];
CGFloat width = scale > 0.0 ? 1.0 / scale : 1.0;
[self.layer setBorderWidth:width];
于 2014-11-22T00:25:59.800 回答