iPhone: 高度为1像素的UIView

3
我正在尝试创建一个高度为1像素的UIView
     UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,20,1)];

在非Retina的iPhone上,这个问题还好,但在Retina上看起来像是2个像素高。

出了什么问题?

2个回答

17

在Retina屏幕上,实际像素和UIKit像素是不同的。

尝试这样做:

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,20,1/[[UIScreen mainScreen] scale])];  

2
这不是一个好主意,框架会处理缩放。这就是为什么在Retina上你仍然得到320 x 480像素。 - benjamin.ludwig
2
这是正确的方法 - 你的解决方案在Retina屏幕上只有一个真实像素,而在非Retina屏幕上只有半个像素。我的解决方案在两种情况下都是一个真实像素。 - Ben Clayton
但是我的解决方案保持了所有比例的正确性。你的解决方案会导致在非Retina屏幕上,该行将占用两倍的空间。我认为如果你想支持非Retina屏幕,利用0.5像素并不是一个好主意。而且没有人想一遍又一遍地使用1/[[UIScreen mainScreen] scale])。 - benjamin.ludwig
@BenClayton 非视网膜设备没有绘制半个像素,它只是将其四舍五入为完整的像素,因此这两种解决方案实际上得出的结果相同。 - Jaanus

1

这是因为CGRectMake使用的是而不是像素。 在Retina设备上,它们将dpi加倍,因此对于1个点,现在有2个像素。 在非Retina设备上,1个点=1个像素


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接