博客> iOS自定义返回按钮后遇到的两个常见问题
iOS自定义返回按钮后遇到的两个常见问题
2017-09-22 21:26 评论:0 阅读:59 梧桐一叶
自定义返回按钮 三个蓝点 返回按钮位置
    由于系统自带的返回按钮是一个很丑的蓝色返回按钮,设计们往往会根据整个app的风格设计自己的返回按钮,这就使得开发者不得不自己自定义返回按钮,自定义返回按钮对开发者来说并不是什么难事,但是往往都会遇到问题:

1、自定义的返回按钮位置不对 2、采用右滑手势返回时返回按钮旁边有三个小蓝点出现

解决问题一:自定义返回按钮 1、swift写法 let btnLeft = UIButton.init(type: UIButtonType.system) btnLeft.setImage(UIImage(named: "icon_fanhuiWhrite"), for: UIControlState.normal) btnLeft.frame = CGRect(x: 0, y: 0, width: 44.0, height: 44.0) btnLeft.contentHorizontalAlignment = UIControlContentHorizontalAlignment.left btnLeft.addTarget(self, action: #selector(backBtnAction), for: UIControlEvents.touchUpInside)

    let leftBarButtonItem = UIBarButtonItem.init(customView: btnLeft)
    self.navigationItem.leftBarButtonItem = leftBarButtonItem

但是这里会遇见一个问题就是与系统返回按钮比起来自定义的返回按钮的位置可能靠右侧了,设置btnLeft.frame是不能解决问题的,苹果给我们提供一个控件UIBarButtonSystemItem.fixedSpace,可以轻松解决,代码如下 let spaceItem = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonSystemItem.fixedSpace, target: nil, action: nil) spaceItem.width = -10//可以根据设计稿标注位置任意调整位置 self.navigationItem.leftBarButtonItems = [spaceItem,leftBarButtonItem]

2、oc写法 UIButton btnLeft = [UIButton buttonWithType:UIButtonTypeSystem]; btnLeft.frame = CGRectMake(0, 0, 44,44); [btnLeft setBackgroundImage:[UIImage imageNamed:@"icon_fanhuiWhrite"] forState:UIControlStateNormal]; [btnLeft addTarget:self action:@selector(backBtnAction) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView: btnLeft];; UIBarButtonItem * spaceItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; spaceItem.width = -15; self.navigationItem.leftBarButtonItems = @[spaceItem, leftBarButtonItem];

解决问题二:给UINavigationBar做一个扩展 右滑返回出现三个小蓝点的网上有很多解决方法误区: 1、self.navigationItem.backBarButtonItem.title = "";​ 2、把自定义的返回按钮的title设置为空btnLef.title = “” 3、隐藏系统返回按钮self.navigationItem.setHidesBackButton(true, animated: true) 即使这三种方法结合起来依然解决不了问题,1和2显然是解决不了问题的,3有很多开发者可能会迷惑,其实当你采用右滑手势返回的动作时系统把返回按钮又重现了。下面就来个彻底的解决办法: 返回按钮是位于导航栏上的,我们就从导航栏上入手,找到这个按钮所在的view,彻底把它隐藏掉,代码如下: extension UINavigationBar {

open override func addSubview(_ view: UIView) {

    super.addSubview(view)

    if NSClassFromString("UINavigationItemButtonView") != nil {

        if view.isKind(of: NSClassFromString("UINavigationItemButtonView")!) {

            view.isHidden = true
        }

    }
}

} 这样问题就彻底解决了(oc写法大家依样画葫芦就可以了)

收藏
1
sina weixin mail 回到顶部