ios – 视网膜问题:如何使UIView的宽度恰好为1像素而不是2像素?

我知道我们正在操作点不是像素,在大多数情况下它是方便的,但我需要使UIView为1像素而不是2像素高度.因此,如果您拖放“Interaface”构建器中的一些UIView(分隔线),并将其设置为1px(点)的高度,则在视网膜屏幕上(在设备和模拟器上)仍将看起来像2像素大小的线.

我知道在viewView中显示的是contentScaleFactor属性,它显示为retina(2.0f)或不是(1.0f).它的视图看起来像1.0f的值,所以你需要从主屏幕中检索:

[UIScreen mainScreen].scale;

这回我2.0f.现在,我添加了这个分隔符视图的高度约束,添加了检查isRetina的方法,并将其划分为1像素:

- (void)awakeFromNib{

  [super awakeFromNib];

  CGFloat isRetina = ([UIScreen mainScreen].scale == 2.0f) ? YES : NO;

  if (isRetina) {

    self.separatorViewHeightConstraint.constant /= 2;
  }
}

这个工作,我只是不确定是使用0.5值的好主意…

解决方法

支持较新的3x显示器(例如iPhone 6),请使用以下代码
UIScreen* mainScreen = [UIScreen mainScreen];
CGFloat onePixel = 1.0 / mainScreen.scale;
if ([mainScreen respondsToSelector:@selector(nativeScale)])
    onePixel = 1.0 / mainScreen.nativeScale;

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...