美文网首页
swift ios11 修改navigationbar间距

swift ios11 修改navigationbar间距

作者: 做人要简单 | 来源:发表于2018-03-09 17:50 被阅读135次

    写在前面

    在ios11中,navigationbar的 leftItem 都会多出来一个奇怪的白边,这个白边很不容易修改,从前的设置方法失效了

    之前看到有篇文章是修改layoutMargins的方案来做的 连接
    这个方案设置虽然简单,但是有一个问题,就是当你push,pop以后,位置就变了,也就是说,layoutMargins就失效了,而且需要遍历,采用ContentView的字符串

    另外有一个方案是采用自定义NavigationBar的方案来做的 连接
    也算是简单暴力

    我这里采用另一个方案来做,而且比较简单,也就是自定义view的方案的来做

    思路

    UIBarButtonItem.init(customView: view)这种方式如果直接将Button放进去,那么你设置的frame的位置是无效的

    那么我这里采用另一个取巧的方案去做
    众所周知,ios中的控件摆放是可以超出父控件距离的,也就是说,我使用一个UIView包裹真正用于显示的View,然后将子View的x设置偏移也就可以解决了

    实现

    
    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,这个看自己的需求或者习惯了

    调用

    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) //调用extension的代码
        }
       
    }
    
    

    截图

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

    说明

    这里比较懒,只定义了左边的item,右部的item同理,只是使用rightItem就可以了,padding 变成+ 而不是 - 就可以了
    还可以抽象一个enum定义left right,然后根据left right 定义padding的正负,毕竟具体的实现都好说

    稀土连接 稀土
    简书连接 简书

    相关文章

      网友评论

          本文标题:swift ios11 修改navigationbar间距

          本文链接:https://www.haomeiwen.com/subject/sukmfftx.html