我們在寫UI界面的時候有時會需要繪制一根 1pixel 的線來充當分隔線展东,類似UITableView 各個 cell 之間的分隔線。通常我們可以通過添加一個 view 來實現(xiàn)解藻,如果是橫線丙号,就設定這個view 的高度為 1pexil,如果是豎線,就設其寬度為 1pixel也切,注意此處的單位是 pixel只壳,即像素。由于在 retina 屏幕中蛤高,iOS坐標系中的一個點(point)的大小并不等于1個像素蚣旱,在4/4s、5/5s戴陡、6/6s中塞绿,1point == 2pixel,而在 6plus/6splus 上恤批,1point == 3pixel异吻,因此實際上我們想要繪制 1pixel 的線,需要設置的高度和寬度是0.5或者 1/3,也就是 < 1的诀浪。這在代碼布局中很好辦到棋返,直接寫上小數(shù)就可以了。但是在 xib 中雷猪,這就是一個問題了睛竣,因為 xib 中設置寬高,或者約束的時候求摇,即使輸入小數(shù)射沟,系統(tǒng)也會自動給我們四舍五入,轉換成整數(shù)与境,這就給我們設置 1pixel 的線帶來了麻煩验夯。
我在 Google 中查了一下這個問題,最終找到了一個相對簡單的解決方案:
首先創(chuàng)建 NSLayoutConstraint 的子類 NSLayoutConstraintOnePixelLine
// NSLayoutConstraintOnePixelLine.m
#import"NSLayoutConstraintOnePixelLine.h"
@implementation NSLayoutConstraintOnePixelLine
- (void)awakeFromNib {
[super awakeFromNib];
if (self.constant == 1) {
self.constant = 1 / [UIScreen mainScreen].scale;
}
}
@end
然后給我們想要設置為 1pixel 的 view 設置上約束摔刁,大小為 1挥转。
再把該約束所屬的類改成剛剛寫的子類就可以了。
用這種方法共屈,通過修改代碼中的 constant 屬性的值绑谣,我們就可以任意修改其他約束的值。