解決xib、storyboard用自動(dòng)布局(Auto Layout)使用UIBezierPath時(shí)出現(xiàn)位置錯(cuò)誤的問題

Auto Layout使布局變得簡單柜思、方便赔硫、從iOS12開始變得更加高效炒俱,目前來看Auto Layout已經(jīng)非常的完善了,簡書一搜爪膊,一大堆的教程向胡,各種花式的教程,我就不在這里貼出了惊完,主要是解決一些關(guān)于Auto Layoutbug僵芹。
今天說的是在使用Auto Layout布局完成以后,因?yàn)樵蛨D圖內(nèi)有個(gè)虛線的邊框小槐,所以直接將view拖拽為屬性拇派,使用UIBezierPath進(jìn)行代碼編寫,虛線很簡單凿跳,代碼如下:

/// 增加虛線
/// @param pDottedLine addview  原文虛線方法轉(zhuǎn)自:http://www.reibang.com/p/12b439443b3b
/// @param pStrokeColor 虛線的顏色
/// @param pFillColor 填充的顏色
/// @param pCornerRadius 設(shè)置圓角
- (void)addDottedLine:(UIView *)pDottedLine withStrokeColor:(CGColorRef)pStrokeColor withFillColor:(CGColorRef)pFillColor withCornerRadius:(CGFloat)pCornerRadius{
    CAShapeLayer *border = [CAShapeLayer layer];
      
       //虛線的顏色
       border.strokeColor = pStrokeColor;
       //填充的顏色
       border.fillColor = pFillColor;
       //要是設(shè)置圓角則 cornerRadius: x
       UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:pDottedLine.bounds cornerRadius:pCornerRadius];
       
       //設(shè)置路徑
       border.path = path.CGPath;
       
       border.frame = pDottedLine.bounds;
       //虛線的寬度
       border.lineWidth = 1.f;
      
       //設(shè)置線條的樣式
       //    border.lineCap = @"square";
       //虛線的間隔
       border.lineDashPattern = @[@4, @2];
       
       //self.lineButton.layer.cornerRadius = 5.f;
       //self.lineButton.layer.masksToBounds = YES;
       
       [pDottedLine.layer addSublayer:border];

}

但是在使用的時(shí)候發(fā)現(xiàn)設(shè)置的虛線運(yùn)行的時(shí)候竟然僅僅是xibframe的大小件豌,而Auto Layout并沒有出現(xiàn)效果,在不同的設(shè)備上切換控嗜,發(fā)現(xiàn)了這一個(gè)bug,除非將此方法放到viewDidAppear:方法內(nèi)茧彤,但是放到viewDidAppear:根據(jù)控制器的生命周期來看,會(huì)出現(xiàn)閃爍疆栏,原因也是很簡單曾掂,因?yàn)樵?code>viewDidAppear:中UI已經(jīng)完成惫谤,再要使用UIBezierPath肯定會(huì)出現(xiàn)閃爍,后來想Auto Layout應(yīng)該是有一個(gè)立即更新UI的方法珠洗,后來看UIView的頭文件溜歪,發(fā)現(xiàn)了setNeedsLayoutlayoutIfNeeded這2個(gè)方法许蓖,api中如下:

// Allows you to perform layout before the drawing cycle happens. -layoutIfNeeded forces layout early
- (void)setNeedsLayout;
- (void)layoutIfNeeded;

又在 stackoverflow 中找到了更加詳細(xì)的說明蝴猪,故在使用Auto Layout布局時(shí),要有后期使用代碼修改UI的時(shí)候膊爪,要先調(diào)用layoutIfNeeded方法自阱。在進(jìn)行修改UI則運(yùn)行以后就會(huì)遵守Auto Layout了,不會(huì)出現(xiàn)在不同設(shè)備上出現(xiàn)偏移的問題米酬,當(dāng)然在切圓角時(shí)也發(fā)現(xiàn)了同樣的問題动壤,提前調(diào)用layoutIfNeeded在進(jìn)行切圓角,即[self.xxx layoutIfNeeded];即可淮逻。

本文引用如下文章:

stackoverflow - How is layoutIfNeeded used?

setNeedsLayout和layoutIfNeeded看我就懂琼懊!

bug效果圖如下:

沒有使用 layoutIfNeeded 的布局.png
使用 layoutIfNeeded 的布局.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市爬早,隨后出現(xiàn)的幾起案子哼丈,更是在濱河造成了極大的恐慌,老刑警劉巖筛严,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件醉旦,死亡現(xiàn)場離奇詭異,居然都是意外死亡桨啃,警方通過查閱死者的電腦和手機(jī)车胡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來照瘾,“玉大人匈棘,你說我怎么就攤上這事∥雒” “怎么了主卫?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鹃愤。 經(jīng)常有香客問我簇搅,道長,這世上最難降的妖魔是什么软吐? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任瘩将,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘姿现。我一直安慰自己肠仪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布建钥。 她就那樣靜靜地躺著,像睡著了一般虐沥。 火紅的嫁衣襯著肌膚如雪熊经。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天欲险,我揣著相機(jī)與錄音镐依,去河邊找鬼。 笑死天试,一個(gè)胖子當(dāng)著我的面吹牛槐壳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播喜每,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼务唐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了带兜?” 一聲冷哼從身側(cè)響起枫笛,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎刚照,沒想到半個(gè)月后刑巧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡无畔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年啊楚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浑彰。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恭理,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出郭变,到底是詐尸還是另有隱情蚯斯,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布饵较,位于F島的核電站拍嵌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏循诉。R本人自食惡果不足惜横辆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望茄猫。 院中可真熱鬧狈蚤,春花似錦困肩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至靖避,卻和暖如春潭枣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背幻捏。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工盆犁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人篡九。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓谐岁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親榛臼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子伊佃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容