在開發(fā)中遇到這樣一個問 題,自定義的導航欄左鍵,在 IOS11以后很難點擊中,很影響用戶體驗,經(jīng)過分析以及參考其他內(nèi)容后,暫時解決;
問題原因分析:引用參考里的圖片:

IOS11之前:
是上面的結(jié)構(gòu),雖然,UIButton起點也是在20像素,但是因為其中"_UINavigationBarBackIndicatorView",在視圖中是透明的,占了前面12像素空間,而神奇的是,點擊前面的空間相當于 點擊了這個_UINavigationBarBackIndicatorView,這個會響應 自定義的back事件,因此IOS11以下點擊左邊空白區(qū)域是能響應的.

IOS11之后:_UINavigationBarBackIndicatorView,沒了,等于前面的20像素真的是空白了,而一般人都會按左上角邊緣區(qū)域,因為給人很難點擊的感覺;
解決目標:讓用戶點擊左邊20像素時也能響應消息;
解決方法:舊有的FIXEDSPACE不行了,這也是搜索中找到的最常辦法,參考文中的方法,1寫一個自己的UIViewController,處理相關(guān)內(nèi)容:
1.(可選),根據(jù)是否11以上擴大點擊區(qū)域,我的點擊區(qū)域目標是0-84,IOS11以下我設的是64,那么IOS11以上設成84,因為要左移20像素;

2.必要,改變Stack的起始位置
2.1通過約束去修改,直接改坐標,會在pushViewControler 時恢復.調(diào)用時機:
-(void)viewDidLayoutSubviews {
? ? [super viewDidLayoutSubviews];
? ? [self resetLeftBtnX];
}
2.2 當popViewControllerAnimated時會恢復,看其他同行的文章,說在viewWillAppear中加入,試過不行,而且返回時不調(diào)用:viewDidLayoutSubviews,暫時的解決辦法:在viewWillAppear中,強制重新layout,暫時解決;
-(void)viewWillAppear:(BOOL)animated {
? ? [super viewWillAppear:YES];
? ? if(IS_IOS_11_PLUS) {
? ? ? ? [self.view setNeedsLayout];
? ? }
}

由于我只是改點擊,所以只要上述操作就可以了.這樣,前面的20像素也能響應點擊事件了.
參考:
http://www.itdecent.cn/p/383cdad95a32
https://blog.csdn.net/spicyshrimp/article/details/78201042
https://blog.csdn.net/spicyShrimp/article/details/77891717