swift ios11 修改navigationbar間距

寫在前面

在ios11中,navigationbar的 leftItem 都會多出來一個奇怪的白邊,這個白邊很不容易修改,從前的設置方法失效了

之前看到有篇文章是修改layoutMargins的方案來做的 連接
這個方案設置雖然簡單,但是有一個問題,就是當你push,pop以后,位置就變了,也就是說,layoutMargins就失效了,而且需要遍歷,采用ContentView的字符串

另外有一個方案是采用自定義NavigationBar的方案來做的 連接
也算是簡單暴力

我這里采用另一個方案來做,而且比較簡單,也就是自定義view的方案的來做

思路

UIBarButtonItem.init(customView: view)這種方式如果直接將Button放進去,那么你設置的frame的位置是無效的

那么我這里采用另一個取巧的方案去做
眾所周知,ios中的控件擺放是可以超出父控件距離的,也就是說,我使用一個UIView包裹真正用于顯示的View,然后將子View的x設置偏移也就可以解決了

實現(xiàn)


import UIKit

extension UIViewController{
  func setNavigatorLeftItem(customView:UIView) {
        var view:UIView
        if #available(iOS 11, *){
            let padding:CGFloat = 20
            let frame = customView.frame
            view = UIView(frame: CGRect(x: 0, y: 0, width: frame.width + padding, height: frame.height))
            customView.frame = customView.frame.offsetBy(dx: -padding, dy: 0)
            view.addSubview(customView)
            
        }else{
            view = customView
        }
        let item = UIBarButtonItem.init(customView: view)
        self.navigationItem.leftBarButtonItem = item
    }
}

沒錯,代碼就這么簡單,沒有別的代碼

當然也可以extension NavigationItem或者NavigationBar,這個看自己的需求或者習慣了

調(diào)用

import UIKit

class CommonViewController : UIViewController{
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let button = ImageButton.init(type: .custom)
        button.rectPerfect = 0.8
        button.image = ImageConst.Image.main_user_center.toUIImage()
        let (_,height) = self.getNavigatorBarSize().getWidthAndSize()
        let w = height / 102 * 120
        let h = height
        
        button.frame = CGRect(x: 5 ,y: 0,width: w,height: h)
        
        self.setNavigatorLeftItem(customView: button) //調(diào)用extension的代碼
    }
   
}

截圖

屏幕快照 2018-03-09 下午5.47.55.png

說明

這里比較懶,只定義了左邊的item,右部的item同理,只是使用rightItem就可以了,padding 變成+ 而不是 - 就可以了
還可以抽象一個enum定義left right,然后根據(jù)left right 定義padding的正負,畢竟具體的實現(xiàn)都好說

稀土連接 稀土
簡書連接 簡書

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

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,917評論 25 709
  • 用到的組件 1、通過CocoaPods安裝 2、第三方類庫安裝 3、第三方服務 友盟社會化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 15,158評論 1 180
  • 每次開會的時候,聽臺上滔滔不絕的講,我心里是有抵觸情緒的,因為他們講的那么多,又有哪一件事情是他們真正意思做到了的...
    hessle閱讀 489評論 0 1
  • 李米:我們上中學的時候相愛,后來一直在一起。我們學習成績都不好,都沒考上大學,他愛看武俠,還有就是跟我談戀愛。我們...
    樹樹的少年閱讀 1,737評論 0 3
  • 《職來職往》是一個求職類電視欄目,我是從2012年開始關注這個節(jié)目的。我之所以喜歡這個節(jié)目,主要是因為老板們關于選...
    高樓休獨依閱讀 703評論 0 1

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