iOS 11 UINavigationItem 去除左右間隙

前言

iOS 11版本由于對于Nav層級結(jié)構(gòu)的改變,導致以前的方法無法達到理想的移動效果,使頂部的按鈕完全靠左,或者是靠右.

該修改思路目前對于iOS 11.2的系統(tǒng)部分情況已經(jīng)無效.
原因是由于從上一個vc返回到當前vc的時候,可能不會觸發(fā)當前vc的viewDidLayoutSubviews方法,就算觸發(fā)了此時self.navigationController.navigationBar也是空的,導致取不到需要修改約束的view,所以造成了約束無法修改為0,達不到現(xiàn)有效果.

臨時修改方法

直接寫一個UINavigationBar的分類,在分類中重寫了layoutSubviews方法.
重寫了之后應該就將原有添加約束的代碼覆蓋掉了,所以邊距不設置也為0了.不過這樣的話,內(nèi)部所有的布局都需要自己完成.

- (void)layoutSubviews{
    for (UIView *subview in self.subviews) {
        if ([NSStringFromClass(subview.class) containsString:@"UIBarBackground"]) {
            if (subview.subviews.count>2) {
                return;
            }
            UIImageView * img=[[UIImageView alloc]initWithFrame:CGRectMake(0, -20, ScreenWidth, 64)];
            img.image=[UIImage imageNamed:@"nav_bg"];
            [subview addSubview:img];
        }
    }
    
}

修改思路

iOS11之前保持原有方式進行設置,iOS11之后進行額外的邊距約束修改達到移動效果.

viewDebug的界面上觀察可以看到需要將UIButtonBarStackView距離左邊和右邊的16的約束改為0即可.

圖片.png

核心代碼

配置導航器view代碼

//0:leftBarButtonItems,1:rightBarButtonItems
- (void)initBarItem:(UIView*)view withType:(int)type{
    UIBarButtonItem * buttonItem = [[UIBarButtonItem alloc]initWithCustomView:view];
    //解決按鈕不靠左 靠右的問題.iOS 11系統(tǒng)需要單獨處理
    UIBarButtonItem * spaceItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
    spaceItem.width = -16;//這個值可以根據(jù)自己需要自己調(diào)整
    switch (type) {
        case 0:
            if (!IS_IOS_VERSION_11) {
                self.navigationItem.leftBarButtonItems =@[spaceItem,buttonItem];
            }else{
                self.navigationItem.leftBarButtonItems =@[buttonItem];
            }
            break;
        case 1:
            if (!IS_IOS_VERSION_11) {
                self.navigationItem.rightBarButtonItems =@[spaceItem,buttonItem];
            }else{
                self.navigationItem.rightBarButtonItems =@[buttonItem];
            }
            break;
            
        default:
            break;
    }
}

處理iOS11情況下的偏移問題,將邊距為16的約束的值改為0.

-(void)viewDidLayoutSubviews{
    if (!IS_IOS_VERSION_11) return;
    UINavigationItem * item=self.navigationItem;
    NSArray * array=item.leftBarButtonItems;
    if (array&&array.count!=0){
        //這里需要注意,你設置的第一個leftBarButtonItem的customeView不能是空的,也就是不要設置UIBarButtonSystemItemFixedSpace這種風格的item
        UIBarButtonItem * buttonItem=array[0];
        UIView * view =[[[buttonItem.customView superview] superview] superview];
        NSArray * arrayConstraint=view.constraints;
        for (NSLayoutConstraint * constant in arrayConstraint) {
            //在plus上這個值為20
            if (fabs(constant.constant)==16) {
                constant.constant=0;
            }
        }
    }
}
改后效果.png

Demo地址:https://github.com/StoneMover/alldemo/tree/master/navDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阳柔,一起剝皮案震驚了整個濱河市旭蠕,隨后出現(xiàn)的幾起案子道川,更是在濱河造成了極大的恐慌女蜈,老刑警劉巖亚兄,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件管削,死亡現(xiàn)場離奇詭異借杰,居然都是意外死亡粪狼,警方通過查閱死者的電腦和手機逞频,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門纯衍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人苗胀,你說我怎么就攤上這事襟诸。” “怎么了基协?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵励堡,是天一觀的道長。 經(jīng)常有香客問我堡掏,道長应结,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任泉唁,我火速辦了婚禮鹅龄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亭畜。我一直安慰自己扮休,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布拴鸵。 她就那樣靜靜地躺著玷坠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪劲藐。 梳的紋絲不亂的頭發(fā)上八堡,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音聘芜,去河邊找鬼兄渺。 笑死,一個胖子當著我的面吹牛汰现,可吹牛的內(nèi)容都是我干的挂谍。 我是一名探鬼主播叔壤,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼口叙!你這毒婦竟也來了炼绘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤妄田,失蹤者是張志新(化名)和其女友劉穎俺亮,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體形庭,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡铅辞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了萨醒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斟珊。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖富纸,靈堂內(nèi)的尸體忽然破棺而出囤踩,到底是詐尸還是另有隱情,我是刑警寧澤晓褪,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布堵漱,位于F島的核電站,受9級特大地震影響涣仿,放射性物質(zhì)發(fā)生泄漏勤庐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一好港、第九天 我趴在偏房一處隱蔽的房頂上張望愉镰。 院中可真熱鬧,春花似錦钧汹、人聲如沸丈探。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碗降。三九已至,卻和暖如春塘秦,著一層夾襖步出監(jiān)牢的瞬間讼渊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工嗤形, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留精偿,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓赋兵,卻偏偏與公主長得像笔咽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子霹期,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫叶组、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,024評論 4 62
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,507評論 25 707
  • 前言 為什么說是困于呢历造?原因很簡單啦甩十,因為js的正則表達式語法是基于Perl5語言,但是ECMAScript只是支...
    longhaiyan閱讀 648評論 4 8
  • 不知道從什么時候開始吭产,同性戀在社會上變得越來越普遍侣监,好像身邊的隨便某個人,都有可能愛著一個同性臣淤。我印象中橄霉,我對同性...
    Heyxmin閱讀 1,318評論 2 8
  • 我們現(xiàn)在業(yè)余文化生活很豐富,大家經(jīng)常參加歌詠活動邑蒋,會面臨要學新歌姓蜂。 拿到歌單,首先要唱會譜子医吊,譜會了钱慢,再把詞填唱。...
    林泉雲(yún)霞閱讀 2,332評論 1 1