天天看點

iOS解決警告: Attribute Unavailable: Automatic Preferred Max Layout Width before iOS 8.0前言1.解決xib版本警告2.pragam 使用預處理指令 忽略警告3. 禁止三方庫所有警告

前言

優秀的開發者在看到每一個警告當做一個報錯去看待、認真去對待解決!在開發中難免都會遇到很多意想不到的警告,但是希望我們每個開發者都能用看待一個問題一樣去了解并解決它,隻有這樣我們才能得到更快的進步。

今天我給大家分享幾個經常遇到的警告解決方法,以及使用預編譯指令忽略掉一些警告的方法等。

1.解決xib版本警告

項目警告:Attribute Unavailable: Automatic Preferred Max Layout Width before iOS 8.0 、

iOS解決警告: Attribute Unavailable: Automatic Preferred Max Layout Width before iOS 8.0前言1.解決xib版本警告2.pragam 使用預處理指令 忽略警告3. 禁止三方庫所有警告

image.png

此警告來源于使用xib或者storyboard開發時出現的!先解釋一下此警告,其警告意思是: 我們要在 iOS8之前 設定 自動換行的最大寬度。 由于我們項目有做相容 iOS7、然後在 xib中 正好有個 label 或者 button。我們隻要設定了其 line , 隻要使其行數 不為 1,然後還相容了 iOS7的話 都會彈出此警告 。因為在 iOS8之前系統要求我們要設定 preferredMaxLayoutWidth 此屬性。 此屬性的意思就是字型每一行寬度最大多少時自動換行。

解決方法有三種:

一.

我們直接在 xib設定控件的屬性 lines将其改成1 , 然後在到代碼中設定其行數即可! 警告直接消失。

二.

我們可以這樣直接到Xib中去設定preferredMaxLayoutWidth 此屬性即可, 看圖

iOS解決警告: Attribute Unavailable: Automatic Preferred Max Layout Width before iOS 8.0前言1.解決xib版本警告2.pragam 使用預處理指令 忽略警告3. 禁止三方庫所有警告

選擇控件的尺寸設定,然後把Explicit勾勾劃上, 此時系統會自動按Label總長度算出一個最大寬度, 如果覺得不标準我們可以自行在計算一次! 說明一下 此寬度是一個最大換行的寬度,如果我們設定的寬度超出控件的寬度其并不會影響到控件換行。

考慮到不同螢幕的适配,我們直接設定一個固定的寬度必然是會出現問題的,布局使用AutoLayout來做, 在iPhone4 中Label可能是 200,到了 iPhone 7中可能又變成了 240, 然後我們如果直接按照 iPhone 4的去 給一個最大寬度,會導緻出現的問題就是, 由于控件的寬度已經固定好了。 其換行的時候肯定會變高。然後由于其長度是 240 但是我們設定最大自動換行為 200, 雖然我們看到控件的問題并不會有什麼明顯的不同。但是我們可以打開可視化 界面, 會發現我們的 Label變的比我們所填寫的内容還要高一些 。 因為系統按我們設定的 最大 換行高度去計算出Label 高度,但是其在填充内容的時候 會自動填滿一行之後才進行換行, 是以我們如果設定自動換行太小,會影響到我們的 Label 真實的高度。 雖然視覺上是看不出來,但是如果我們使用 AutoLayout布局 ,然後正好 Label 上面一個控件于其有依賴關系 ,本來隻是 5個像素距離 ,然後運作後可能變成了 15。 解決方法: 我們可以直接按照 最大機型去填寫 自動換行 寬度 即可!

三.

第二種方法設定完之後總感覺有點怪怪的,怕設定自動換行高度填寫錯導緻一些異樣不到的錯誤。那我們可以看下第三種方法。

相對更靠譜的方法就是勾選完設定自動換行之後在代碼中添加代碼去重新計算其最大寬度 如在控制器中

-(void)viewDidLayoutSubviews

{

[super viewDidLayoutSubviews];

self.tipsLabel.preferredMaxLayoutWidth = self.tipsLabel.bounds.size.width;

}

在View中

  • (void)layoutSubviews

    [super layoutSubviews];

    這樣等 控件布局結束 得到其真實寬高之後,在拿來設定一次 其 最大的換行 寬度是最合理的!

2.pragam 使用預處理指令 忽略警告

先引入 三個宏定義

//#pragam clang diagnostic push

//#pragam clang diagnostic ignored "-Wno-nonnull" “此處填寫的時次警告的類型”

//#pragam clang diagnostic pop

解釋一下這三個預處理指令含義, 第一條是告訴編譯器 開始執行忽警告, 第二條是把要忽略的警告類型 告訴編譯器 , 編譯器會自動幫我們忽略掉 我們要進行忽略的警告, 第三條則是關閉警告的忽略。

不過此處最麻煩的就是我們不知道目前警告的類型 。 之前我也挺糾結此事 後面找到這篇文章, 裡面有很多相關警告的類型

http://fuckingclangwarnings.com/

我們可以通過 警告的 一些關鍵字來查找一下 對應的類型。

3. 禁止三方庫所有警告

有時候我們引入一些三方庫,總是有很多亂七八糟的警告。 直接在項目的 Podfile 檔案中添加 此段代碼 即可全部忽略掉。 inhibit_all_warnings! #禁止掉警告 不是很推薦 隻是有時候對于一些強迫症者來說看到一條警告都會受不了的

結尾

總感覺少了挺多相關内容,關于警告有很多解決的技巧,由于時間等關系,等自己有空了在過來稍作補充,如有錯誤的地方麻煩大家幫忙指出,謝謝大家!

學習的路上, 與君共勉!!!!!

繼續閱讀