iOS - 帧高不是由像素?

时间:2012-10-09 13:33:19

标签: objective-c ios frame cgrect

我刚才有一个关于帧高的问题。

frame.size.height = 450;

当x = 0且y = 0时,我设置高度为450的CGRect框架。工作台视图几乎一直延伸到底部。这个数字不是基于像素,因为我在iPhone 5 1136上测试它。它甚至不应该延长一半。

谢谢!

3 个答案:

答案 0 :(得分:9)

iOS屏幕坐标位于UI点。一点是原始密度屏幕上的一个像素,因此一个点是高分辨率/视网膜显示器上的两个像素。

2014年更新:iPhone 6 Plus上的一分甚至是三个像素。 (2018年:和iPhone 6s Plus,7 Plus,8 Plus和X.)

答案 1 :(得分:3)

你的点和像素令人困惑。 有关详细信息,请参阅Apple iOS文档。

  

在iOS中,您在绘图代码中指定的坐标与底层设备的像素之间存在差异。使用Quartz,UIKit和Core Animation等原生绘图技术时,绘图坐标空间和视图的坐标空间都是逻辑坐标空间,以点为单位测量距离。这些逻辑坐标系与系统框架用于管理屏幕上像素的设备坐标空间分离。

     

系统会自动将视图坐标空间中的点映射到设备坐标空间中的像素,但此映射并不总是一对一的。这种行为导致了一个重要的事实,你应该永远记住:

     

一点不一定对应于一个物理像素。   使用点(和逻辑坐标系)的目的是提供与设备无关的一致输出大小。

答案 2 :(得分:1)

正如Jesper和Rikkles所说,iPhone 5有一个Retina显示屏,这意味着您需要将设置的像素数加倍,以匹配屏幕上实际显示的像素数。

另外,请注意,如果您的容器视图是针对原始iPhone分辨率(320x480)设计的,则在iPhone 5上使用时可能会调整其大小,使原始“450”设置为450/480 * 568 = 533像素高度。