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

如圖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)題一下就解決了。。


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