iOS 14適配,項目中遇到的那些坑

iOS14更新后的適配鼠次,在項目中遇到的一些問題慨代,持續(xù)更新中~

除了這個鏈接下面邢笙,還遇到了一些其他的問題
http://www.reibang.com/p/1803bd950b90

說明:
當前的這些問題,使用 < Xcode12打包上線appStore鱼响,或者打的adHoc包鸣剪,安裝在iOS14系統(tǒng)的手機上,可能一切正常丈积。
當使用Xcode12直接打包筐骇,或者調(diào)試iOS14系統(tǒng)手機才會出現(xiàn)。

1江滨、gif加載圖片問題

項目中可能會有加載gif和png,jpg的需求铛纬,Xcode12調(diào)試運行,發(fā)現(xiàn)圖片不見了唬滑。
現(xiàn)象:

image.png

原因:
1.1告唆、使用SDWebImage比較老的庫<沒有一個個的驗證,我們用的是5.8.0>中的SDAnimatedImageView加載網(wǎng)絡(luò)圖片晶密,會造成加載失敗

1.2擒悬、使用YYImage的最新庫<當前是1.0.4,上次更新是2017年>中的YYAnimatedImageView加載網(wǎng)絡(luò)圖片稻艰,會造成加載失敗

可能這兩個庫沒有在項目中直接使用懂牧,但是如果使用了一些三方的大圖瀏覽之類的三方庫,可能會出現(xiàn)圖片加載失敗的情況尊勿,比如YBImageBrowser

適配方案:
1.1僧凤、SDWebImage直接升級到最新庫即可
1.2、YYImage因為沒有更新元扔,可以考慮換成SDWebImage躯保,或者直接修改YYImage的源碼
- (void)displayLayer:(CALayer *)layer修改下,打成私有pod庫

- (void)displayLayer:(CALayer *)layer {
    if (_curFrame) {
        layer.contents = (__bridge id)_curFrame.CGImage;
    } else {
        // If we have no animation frames, call super implementation. iOS 14+ UIImageView use this delegate method for rendering.
        if ([UIImageView instancesRespondToSelector:@selector(displayLayer:)]) {
            [super displayLayer:layer];
        }
    }
}

為啥這么修改呢澎语?
參考SD的SDAnimatedImageView的修改

- (void)displayLayer:(CALayer *)layer
{
    UIImage *currentFrame = self.currentFrame;
    if (currentFrame) {
        layer.contentsScale = currentFrame.scale;
        layer.contents = (__bridge id)currentFrame.CGImage;
    } else {
        // If we have no animation frames, call super implementation. iOS 14+ UIImageView use this delegate method for rendering.
        if ([UIImageView instancesRespondToSelector:@selector(displayLayer:)]) {
            [super displayLayer:layer];
        }
    }
}

2途事、UIProgressView<進度條>變粗了

現(xiàn)象:

image.png

原因:
iOS14验懊,UIProgressView默認高度變?yōu)?,之前是2尸变,如果產(chǎn)品要求保持之前的高度鲁森,需要進行適配

適配方案:

- (UIProgressView *)progressView {
    if (!_progressView) {
        _progressView = [[UIProgressView alloc] initWithFrame:self.bounds];
        _progressView.progressTintColor = JMIBaseColor;
        _progressView.trackTintColor = JMIColor(0xD8D8D8);
        // 適配iOS14,UIProgressView高度變?yōu)?
        if (CGRectGetHeight(_progressView.frame) == 4) {
            _progressView.transform = CGAffineTransformMakeScale(1.0, 0.5);
        }
    }
    return _progressView;
}

3振惰、UITableviewCell歌溉、UICollectionViewCell中的內(nèi)容無法響應(yīng)或者不可見

現(xiàn)象
UITableviewCell、UICollectionViewCell 上的按鈕骑晶,點擊沒有響應(yīng)了
UITableviewCell痛垛、UICollectionViewCell 上的控件看不到了

按鈕看不到了.png

UIConnectionViewCell如果不對contentView做操作的話,暫時沒事桶蛔,比如設(shè)置了下contentView.backgroundColor就有問題了,蘋果應(yīng)該是對contentView使用了懶加載

原因
在iOS14匙头,蘋果修改了UITableViewCell的控件層級結(jié)構(gòu),將contentView移動到了最上層仔雷,所以直接添加到self上的控件將會被contentView擋住

適配方案:
將cell上相關(guān)控件蹂析,添加到self.contentView上面

[self.contentView addSubview:self.showLabel];
[self.contentView addSubview:self.btn];

其他建議:
為了保險,將UICollectionViewCell碟婆、UITableViewHeaderFooterView
上面的控件也添加到contentView上面电抚,鬼知道蘋果下一次升級是不是默認會把contentView搞到最上層

4、UITableview 分組高度設(shè)置為0.01會出現(xiàn)一根線

現(xiàn)象:
如下結(jié)構(gòu)代碼

tableView.style = UITableViewStylePlain
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 0.01;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return 0.01;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    
    return nil;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    
    return nil;
}

image.png

在之前竖共,當tableView.style = UITableViewStyleGrouped的時候蝙叛,設(shè)置sectionHeadersectionFooter的高度為0的時候,往往設(shè)置0不管用<iOS10>公给,會設(shè)置個0.01借帘。為了封裝方便,可能有的時候當tableView.style = UITableViewStylePlain的時候淌铐,也會這么干肺然。
這樣就會使得tableView.style = UITableViewStyleGrouped/UITableViewStylePlain的時候讓sectionHeadersectionFooter的高度看不到了

但是在iOS14,就會出現(xiàn)上面說的那種情況,當然了tableView.style = UITableViewStyleGrouped不受影響

適配方案:
1腿准、當tableView.style = UITableViewStylePlain
iOS10~iOS14通用

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 0;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return 0;
}

2际起、如果當前封裝的tableView兩種類型都有,那么進行相關(guān)的判斷

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    if (tableView.style == UITableViewStyleGrouped) {
        return 0.01;
    }
    return 0;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    if (tableView.style == UITableViewStyleGrouped) {
        return 0.01;
    }
    return 0;
}

5释涛、UIWebView 消除大作戰(zhàn)

ITMS-90809:廢棄API用法- 2020年12月將不再接受使用UIWebView的應(yīng)用程序更新加叁。相反倦沧,使用WKWebView來提高安全性和可靠性

基本上每次上線都能看到這個東西,近期聽說集團有App上線已經(jīng)因為這個UIWebView被拒了唇撬。所以來次大檢查吧
1、檢測源碼中是否有UIWebView展融,或者UIWebViewDelegate
這個直接在搜索框中搜索即可
2窖认、源碼中沒有UIWebView不代表安全了,通過Mach-O來全面查找吧
otool -oV [Mach-O路徑] | tee [檢測結(jié)果日志文件名稱].log

otool -oV /Users/a58/Desktop/Tools/XXX.app/XXX  | tee classInfo.log

解釋
otool -oV [Mach-O路徑]
是獲取所有的類結(jié)構(gòu)及其定義的方法
| tee classInfo.log
由于打印的東西較多,我們在終端中顯示不下扑浸,可以將終端打印的東西搞到文件中

直接在.log中查詢UIWebView即可


image.png
image.png

通過該方法可以找到相關(guān)的三方庫中的UIWebView和相關(guān).a
.framework
中的UIWebView烧给,然后進行相關(guān)的升級和替換

如果你在項目中還遇到了其他的一些問題,評論區(qū)見~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喝噪,一起剝皮案震驚了整個濱河市础嫡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌酝惧,老刑警劉巖榴鼎,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異晚唇,居然都是意外死亡巫财,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門哩陕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來平项,“玉大人,你說我怎么就攤上這事悍及∶銎埃” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵心赶,是天一觀的道長鸳粉。 經(jīng)常有香客問我,道長园担,這世上最難降的妖魔是什么届谈? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮弯汰,結(jié)果婚禮上艰山,老公的妹妹穿的比我還像新娘。我一直安慰自己咏闪,他們只是感情好曙搬,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鸽嫂,像睡著了一般纵装。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上据某,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天橡娄,我揣著相機與錄音,去河邊找鬼癣籽。 笑死挽唉,一個胖子當著我的面吹牛滤祖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瓶籽,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼匠童,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了塑顺?” 一聲冷哼從身側(cè)響起汤求,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎严拒,沒想到半個月后首昔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡糙俗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年勒奇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巧骚。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡赊颠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出劈彪,到底是詐尸還是另有隱情竣蹦,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布沧奴,位于F島的核電站痘括,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏滔吠。R本人自食惡果不足惜纲菌,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疮绷。 院中可真熱鬧翰舌,春花似錦、人聲如沸冬骚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽只冻。三九已至庇麦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喜德,已是汗流浹背山橄。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留住诸,地道東北人驾胆。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像贱呐,于是被迫代替她去往敵國和親丧诺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

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

  • github上關(guān)于iOS的各種開源項目集合(轉(zhuǎn)) UI 下拉刷新 EGOTableViewPullRefresh-...
    其實也沒有閱讀 7,150評論 1 111
  • 久違的晴天奄薇,家長會驳阎。 家長大會開好到教室時,離放學已經(jīng)沒多少時間了馁蒂。班主任說已經(jīng)安排了三個家長分享經(jīng)驗呵晚。 放學鈴聲...
    飄雪兒5閱讀 7,495評論 16 22
  • 創(chuàng)業(yè)是很多人的夢想,多少人為了理想和不甘選擇了創(chuàng)業(yè)來實現(xiàn)自我價值沫屡,我就是其中一個饵隙。 創(chuàng)業(yè)后,我由女人變成了超人沮脖,什...
    亦寶寶閱讀 1,802評論 4 1
  • 今天感恩節(jié)哎金矛,感謝一直在我身邊的親朋好友。感恩相遇勺届!感恩不離不棄驶俊。 中午開了第一次的黨會,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,551評論 0 11
  • 可愛進取免姿,孤獨成精饼酿。努力飛翔,天堂翱翔胚膊。戰(zhàn)爭美好故俐,孤獨進取。膽大飛翔紊婉,成就輝煌购披。努力進取,遙望肩榕,和諧家園刚陡。可愛游走...
    趙原野閱讀 2,716評論 1 1