今是昨非

今是昨非

日出江花红胜火,春来江水绿如蓝

AutoLayout自適應label出現的問題

我在做最近一個專案,自適應 label 的時候,總是出現一個問題:#

image1

image2

這讓我很是鬱悶,而且只有在 6 和 6p 上出現,開始我以為是我自適應的方式不對,但是重寫了幾遍之後,發現我沒寫錯。。。。
問題在哪,始終找不到。

  1. 今天在群裡看到一小夥伴發關於自適應 label 的代碼,求教了一下,然後找到了這個VerticallyAlignedLabel,然後興高采烈的嘗試,以為終於要解決了,結果發現,確實是向上對齊了,但是多餘的部分還在;
  2. 那麼問題是在哪?然後我就找啊找啊,然後我發現了這個Multiline UILabel height with Autolayout higher in landscape,stackoverflow 上的問題,之前我一直搜中文,但是,搜不出來,換英文之後,終於有相似的問題出現了,我就說,肯定不止我一個人遇到(這麼蠢😢),然後還有這個 objc.io 也出現了Intrinsic Content Size of Multi-Line Text,然後我打算照著他們的方法修改;
  3. 他大爺的,我都沒辦法直接用他們的方法,因為我把 view 摘出來了,而且還是 tableViewcell 上的 label,後來機智的我說,不就是因為那個寬度的問題嗎,我沒辦法讓它自己跟著 super 的 frame 改變,我還不能直接計算個正確的放在這裡,果然佩服我自己。然後運行...
  4. 坑爹呢,還不行,靠,還能不能愉快的玩耍了,不想活了啊

image3

  1. 就在這時候,我突然發現,我在給 label 賦值的下面,還加了一行,增加 label 間距的代碼,註釋掉,試試... 嗯,成功了,不要激動,換 6p 試試,結果... 真的成功了,此刻的我

  2. 還差最後一點,改了這麼多,究竟是哪里起作用了?還是一起起作用了,然後把第一步的自定義 label 刪掉,嗯,沒出問題,然後把計算 frame 的刪掉,shit,不行,這句是關鍵,然後就沒有然後了。花了一下午的功夫,只做了兩件事:a. 添了一句話;b. 刪了一句話。

這是起始的代碼:#

image5

這是最後的#

image6

總結#

其實,這個原因,我早就應該查出來,因為這個問題只在 iPhone6/iPhone6p 上出現,而這裡這個判斷就是剛好針對比 5s 屏幕寬的手機,但是我一直沒往這上面想;Ps(如果大家出現計算高度多出來這個問題,可以直接嘗試 2 裡給出的鏈接的方法;如果是高度少了的話,看看你是不是少加了 0.1)

而且,我確實少寫了一句話,就是設置 label 寬度的那個,因為我的 view 添加到 controller 是在 viewDidLoad 裡,而那時候自動佈局還沒結束,***(Ps: 正常設置 frame 應該在 viewDidLayOutSubviews 裡)** 但是我一般都是在 viewDidLoad 裡創建,創建的時候直接給 frame,所以終於吃到苦果了。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。