返回UIBarButtonItem外观删除文本并更改图像

时间:2017-08-11 09:24:52

标签: ios uiviewcontroller uinavigationcontroller uibarbuttonitem

我已经看了很多像这样的问题,并没有找到我的问题的答案。

我现在该怎么做:

APPDELEGATE (didFinishLaunchingWithOptions)

// Text
let barButtonItem = UIBarButtonItem.appearance()
barButtonItem.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: UIControlState.normal)
barButtonItem.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: UIControlState.highlighted)

// Image
let backImage = UIImage(named: "arrow_left"
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage

这几乎适合我需要的东西,但屏幕标题向右移动,因为有一个不可见的后退按钮文本。它绝对是(根控制器的标题长度为9个字符): enter image description here

问题是:如何在ios 9.0中为后退按钮的每个外观更改图像,隐藏文本并保持标准后退动作?

5 个答案:

答案 0 :(得分:2)

以下是如何为导航栏添加“自定义”按钮

 let btnleft : UIButton = UIButton(frame: CGRect(x:0, y:0, width:35, height:35))
 btnleft.contentMode = .center
 btnleft.setImage(Set_Local_Image("arrow_left"), for: .normal)
 btnleft.addTarget(self, action: #selector(YOUR_ACTION), for: .touchDown)

let backBarButon: UIBarButtonItem = UIBarButtonItem(customView: btnleft)
self.navigationItem.setLeftBarButtonItems([menuBarButon], animated:false)

而不是" arrow_left"您可以使用任何想要的图像

对于默认后退操作,您可以创建功能(YOUR_ACTION)并使用后退按钮的选择器

navController.popViewController(animated: true)

答案 1 :(得分:1)

有三种方法可以做你想做的事。

  1. 我建议:通过扩展和UINavigationController创建自己的导航类,并覆盖backbuttonItem(UIBarButtonItem)属性,以根据您的要求对其进行自定义。并在项目中使用相同的Navigation Controller类。

  2. 通过扩展UIBarButtonItem创建自定义backBarButton,并在所有视图控制器中手动设置为默认Navigation Controller类的后退按钮。

  3. 从根控制器隐藏默认导航栏,并在所有视图控制器中使用UIView和UIButton创建自己的导航栏。 (我总是使用这个选项,这使得我很容易定制导航栏。我可以根据我的要求设置我的视图)

答案 2 :(得分:0)

UINavigationBar.appearance().setBackgroundImage(UIImage(), for: 
UIBarPosition.any, barMetrics: UIBarMetrics.default)
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().barTintColor = UIColor.main
UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().clipsToBounds = false
UINavigationBar.appearance().backgroundColor = UIColor.main
UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : 
 (UIFont(name: "Helvetica", size: 18))!, NSForegroundColorAttributeName: 
  UIColor.white]

尝试此代码并相应地进行更改以设置图像,颜色和其他属性

答案 3 :(得分:0)

你应该看看Mark Moeykens的youtube系列。他是恕我直言,是Swift中UI设计和实现的最佳YouTube主持人之一。

播放列表为https://www.youtube.com/playlist?list=PLHDMmeIMXj8WyvlX5uFmppVn2Pm0bXVr7

答案 4 :(得分:0)

  

为UINavigationItem创建扩展

extension UINavigationItem {
    func backBarButtonItem() -> UINavigationItem {
        return UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)
    }
}