在Xib中繪制1像素的線

我們?cè)趯慤I界面的時(shí)候有時(shí)會(huì)需要繪制一根 1pixel 的線來(lái)充當(dāng)分隔線,類似UITableView 各個(gè) cell 之間的分隔線。通常我們可以通過(guò)添加一個(gè) view 來(lái)實(shí)現(xiàn),如果是橫線,就設(shè)定這個(gè)view 的高度為 1pexil,如果是豎線,就設(shè)其寬度為 1pixel,注意此處的單位是 pixel,即像素。由于在 retina 屏幕中,iOS坐標(biāo)系中的一個(gè)點(diǎn)(point)的大小并不等于1個(gè)像素,在4/4s、5/5s、6/6s中,1point == 2pixel,而在 6plus/6splus 上,1point == 3pixel,因此實(shí)際上我們想要繪制 1pixel 的線,需要設(shè)置的高度和寬度是0.5或者 1/3,也就是 < 1的。這在代碼布局中很好辦到,直接寫上小數(shù)就可以了。但是在 xib 中,這就是一個(gè)問(wèn)題了,因?yàn)?xib 中設(shè)置寬高,或者約束的時(shí)候,即使輸入小數(shù),系統(tǒng)也會(huì)自動(dòng)給我們四舍五入,轉(zhuǎn)換成整數(shù),這就給我們?cè)O(shè)置 1pixel 的線帶來(lái)了麻煩。
我在 Google 中查了一下這個(gè)問(wèn)題,最終找到了一個(gè)相對(duì)簡(jiǎn)單的解決方案:

首先創(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

然后給我們想要設(shè)置為 1pixel 的 view 設(shè)置上約束,大小為 1。


再把該約束所屬的類改成剛剛寫的子類就可以了。

用這種方法,通過(guò)修改代碼中的 constant 屬性的值,我們就可以任意修改其他約束的值。

閱讀原文/原文地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容