我知道我们在点而不是像素上操作,在大多数情况下它很方便,但我需要使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值是个好主意......
Ale*_*dro 12
要支持更新的3x显示器(例如iPhone 6+),请使用以下代码:
UIScreen* mainScreen = [UIScreen mainScreen];
CGFloat onePixel = 1.0 / mainScreen.scale;
if ([mainScreen respondsToSelector:@selector(nativeScale)])
onePixel = 1.0 / mainScreen.nativeScale;
Run Code Online (Sandbox Code Playgroud)
Mat*_*hew 10
您的代码有效.使用0.5来设置UIView的帧将按照需要工作,因为帧的参数是CGFloat.如果您希望使用以点单位表示单个像素的CGFloat而不是self.separatorViewHeightConstraint.constant,则下面的代码将起作用.
CGFloat scaleOfMainScreen = [UIScreen mainScreen].scale;
CGFloat alwaysOnePixelInPointUnits = 1.0/scaleOfMainScreen;
Run Code Online (Sandbox Code Playgroud)
小智 5
你可以做到
self.separatorViewHeightConstraint.constant = self.separatorViewHeightConstraint.constant / [UIScreen mainScreen].scale;
Run Code Online (Sandbox Code Playgroud)
是将值设置为0.5是在视网膜上获得"真正的"1px线的唯一方法
| 归档时间: |
|
| 查看次数: |
5817 次 |
| 最近记录: |