iOS11 導(dǎo)航欄按鈕適配

升級(jí)到Xcode9之后項(xiàng)目導(dǎo)航欄的按鈕出現(xiàn)了錯(cuò)亂。

導(dǎo)航欄錯(cuò)亂.png

如圖leftBarButtonItem出現(xiàn)了明顯的錯(cuò)亂,而且rightBarButtonItem點(diǎn)擊也沒(méi)有了反應(yīng)。因?yàn)閕OS11出來(lái)也比較久了,直接在網(wǎng)上查閱了一波資料,解決的方案也比較多。其核心思路都是強(qiáng)行給他們重新布局或者移位。
例如 iOS11 導(dǎo)航欄按鈕位置問(wèn)題的解決——新

    UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
                                                                               target:nil
                                                                               action:nil];
    fixedSpace.width = width;

也有心狠直接重寫drawrect的iOS11 正確控制導(dǎo)航leftBarButtonItems的姿勢(shì)

雖然這些方法,也能解決部分問(wèn)題。但是感覺(jué)還是沒(méi)有解決根本問(wèn)題。于是結(jié)合iOS11前后的的navigationBar的視圖結(jié)構(gòu)研究發(fā)一番,很輕易就能發(fā)現(xiàn)發(fā)生的一些變化。其中最關(guān)鍵的就是點(diǎn)就是UIButtonBarStackview.看他的名字應(yīng)該是就是UIStackView無(wú)疑。對(duì)UIStackView不熟悉,沒(méi)關(guān)系,UIStackView是iOS9推出來(lái)幫助開(kāi)發(fā)者進(jìn)行線性的布局頁(yè)面,這組控件可以垂直顯示,也可以水平顯示。UIStackView教程

所以簡(jiǎn)單來(lái)說(shuō)要解決這個(gè)問(wèn)題很簡(jiǎn)單。翻一下UIStackView的文檔,會(huì)發(fā)現(xiàn)真的是一大篇。其中有句話很關(guān)鍵。The stack view uses Auto Layout to position and size its arranged views.
之前的代碼都是用的frame去初始化navigationItem。然后我嘗試用了下用masony去對(duì)navigationItem.customView做了下約束。發(fā)現(xiàn)問(wèn)題一下就解決了。。

iOS11之后的導(dǎo)航欄.png

iOS11之前的導(dǎo)航欄.png

試了半天也沒(méi)找到怎么讓圖片并排的方法。。。。。很難受

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容