1.導(dǎo)航欄圖層變化
ios10以前
ios11
在iOS11之后避矢,蘋果添加了新的類來管理仁烹,navigationBar會(huì)添加在_UIButtonBarStackView上面鹃彻,而_UIButtonBarStackView則添加在_UINavigationBarContentView上面茶没;如果沒有給titleView賦值侈询,則titleView會(huì)直接添加在_UINavigationBarContentView上面舌涨,如果賦值給了titleView,則會(huì)新生成_UITAMICAdaptorView扔字,把titleView添加在這個(gè)類上面囊嘉,這個(gè)類會(huì)添加在_UINavigationBarContentView上面温技,
2.邊距
1)如果只是設(shè)置了titleView,沒有設(shè)置barbutton扭粱,把titleview的寬度設(shè)置為屏幕寬度舵鳞,則titleview距離屏幕的邊距,iOS11之前琢蛤,在iPhone6p上是20p蜓堕,在iPhone6p之前是16p;iOS11之后博其,在iPhone6p上是12p套才,在iPhone6p之前是8p。
2)如果只是設(shè)置了barbutton慕淡,沒有設(shè)置titleview背伴,則在iOS11里,barButton距離屏幕的邊距是20p和16p儡率;在iOS11之前挂据,barButton距離屏幕的邊距也是20p和16p。
3)如果同時(shí)設(shè)置了titleView和barButton儿普,則在iOS11之前崎逃,titleview和barbutton之間的間距是6p,在iOS11上titleview和barbutton之間無間距
3.手機(jī)在升級(jí)ios11之后 導(dǎo)航返回按鈕變的特別不靈敏眉孩,個(gè)人的處理方案是:
在iOS11之前个绍,可以設(shè)置一個(gè)width為負(fù)的navigationBarButton,將按鈕擠到邊緣浪汪,變相實(shí)現(xiàn)0邊距的導(dǎo)航欄按鈕巴柿,但是,這招在iOS11失效了死遭,原因在于_UIButtonBarStackView广恢,這個(gè)iOS9之后出來的,用來相對(duì)布局的組件呀潭,限制了子view的布局
ios10 之前原來的方案:
UIButton *btnLeft = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 20,20)];
[btnLeft setTitle:@"" forState:UIControlStateNormal];
[btnLeft setBackgroundImage:ImageNamed(@"navigationBar_popBack") forState:UIControlStateNormal];
btnLeft.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[btnLeft addTarget:self action:@selector(popVC) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:btnLeft];
UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
target:nil action:nil];
negativeSpacer.width = -5;
[self.navigationItem setLeftBarButtonItems:@[negativeSpacer,leftItem]];
iOS 11之后做了以下調(diào)整:
UIButton *btnLeft = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30,44)];
[btnLeft setTitle:@"" forState:UIControlStateNormal];
[btnLeft setImage:ImageNamed(@"navigationBar_popBack") forState:UIControlStateNormal];
btnLeft.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[btnLeft addTarget:self action:@selector(popVC) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:btnLeft];
UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
target:nil action:nil];
negativeSpacer.width = 0;
[self.navigationItem setLeftBarButtonItems:@[negativeSpacer,leftItem]];
1)將按鈕的寬度變大 內(nèi)容靠左顯示
主要考慮到用戶點(diǎn)擊的區(qū)域 如果靠右顯示的話用戶點(diǎn)擊了那么右邊的部分可能沒反應(yīng) 因?yàn)榈竭吷狭恕?/p>
2)設(shè)置image 而不是backgroundImage 防止返回箭頭變形 這時(shí)候可以在原來的基礎(chǔ)上 把箭頭的切圖尺寸稍微放大些比如可以設(shè)置(40px*40px)
3)原來設(shè)置了leftspace 為負(fù)值 現(xiàn)在將其設(shè)置位0 或者直接不要也行钉迷。
注:參考鏈接:App界面適配iOS11