前言
一個(gè)簡單的瀏覽器,使用到UIToolbar做底部工具欄,在 iOS11 上就有點(diǎn)擊無響應(yīng)的問題?,F(xiàn)在發(fā)現(xiàn)蘋果一到大系統(tǒng)版本,很多 UIView的實(shí)現(xiàn)和生命周期都變化,他們系統(tǒng)不用兼容 iOS10,想怎么改就怎么改,沒有顧慮,但是我們作為開發(fā)者只能受累。

iOS 11
原因:Toolbar 在iOS11默認(rèn)添加有_UIToolbarContentView,_UIToolbarContentView _UIButtonBarStackView覆蓋在自定義的按鈕上面,導(dǎo)致按鈕無響應(yīng)。


解決
為了解決iOS11(與較低版本兼容)的問題,您只需要在UIToolBar被添加為UI層次結(jié)構(gòu)的子視圖之后,調(diào)用 layoutIfNeeded方法,UIToolbarContentView會(huì)降低到UIToolBar的第一個(gè)子視圖,然后你就可以將所有的子視圖添加到最頂層。
For example in ObjC,
UIToolbar *toolbar = [UIToolbar new];
[self addSubview: toolbar];
[toolbar layoutIfNeeded];
<here one can add all subviews needed>
在創(chuàng)建成功后,使用layoutIfNeeded方法,讓_UIToolbarContentView馬上生效,這樣在添加子視圖就沒有問題啦。

總結(jié)
iOS11 上的 NavigationBar 好像也有相似的結(jié)構(gòu)變化,每一次新系統(tǒng),用戶無愿意升級,開發(fā)者為適配要付出更多,一方面是蘋果的改變壓力在加大,系統(tǒng)的維護(hù)也是一個(gè)很大工作;另一方面 App 的界面越來越復(fù)雜,如果在搭建時(shí)沒有設(shè)計(jì)好 UI 框架,部分依賴系統(tǒng)組件功能,導(dǎo)致受到影響也比較大。
參考閱讀
- Hello World
- ios - iOS11 UIToolBar Contentview - Stack Overflow
- iOS 11 breaks slacktextviewcontroller · Issue #604 · slackhq/SlackTextViewController
注:本文首發(fā)于 iHTCboy's blog,如若轉(zhuǎn)載,請注明來源。