2016-03-08 100 views
0

我正在自定義一個導航欄,其中y位置低於默認值。我試過很多方法:在UINavigationBar中快速更改UIBarButtonItem的位置

  • setBackButtonBackgroundVerticalPositionAdjustment:
  • 組自定義視圖的CGRectOffset
  • UIBarButtonItem.appearance().setTitlePositionAdjustment(UIOffset.init(horizontal: X, vertical: Y), forBarMetrics: UIBarMetrics.Default)

他們所做的項目出現在正確的位置,但是當我點擊我不能解僱任何行動/觸及他們。我想因爲我沒有碰過酒吧物品,他們只是這些物品的外觀/複製視圖/圖像。

enter image description here

任何人可以幫我解決這個問題呢?

我的代碼:

let lblTitle = UILabel(frame: CGRectMake(0, 0, 100, 28)) 
      lblTitle.text = FMLStringLocale("APP_name") 
      lblTitle.textColor = UIColor.whiteColor() 
      lblTitle.font = ROBOTO_THIN_24 
      lblTitle.textAlignment = NSTextAlignment.Left 
      lblTitle.backgroundColor = UIColor.clearColor() 
      lblTitle.transform = CGAffineTransformMakeTranslation(6, 11) 

      let lblTitleContainer = UIView(frame: lblTitle.frame) 
      lblTitleContainer.addSubview(lblTitle) 
      let leftTitle = UIBarButtonItem(customView: lblTitleContainer) 
      navigationItem.leftBarButtonItem = leftTitle 

      let rightView = UIView(frame: CGRectMake(0, 0, 134, 22)) 
      rightView.backgroundColor = UIColor.whiteColor() 
      rightView.transform = CGAffineTransformMakeTranslation(0, 18) 

      let imvUSFlag = UIImageView(image: UIImage(named: "icon_us")) 
      imvUSFlag.frame = CGRectMake(0, 0, 19, 13) 
      imvUSFlag.transform = CGAffineTransformMakeTranslation(-2, 20) 

      rightView.addSubview(imvUSFlag) 

      let switcher = UISwitch(frame: CGRectMake(imvUSFlag.frame.maxX - 5, 12, 31, 16)) 
      switcher.setOn(false, animated: false) 
      switcher.addTarget(self, action: Selector("tapToChangeLanguage:"), forControlEvents: UIControlEvents.ValueChanged) 
      switcher.transform = CGAffineTransformMakeScale(0.5, 0.5) 

//   let switchContainer = UIView(frame: switcher.frame) 
//   switchContainer.addSubview(switcher) 

      rightView.addSubview(switcher) 

      let imvFRFlag = UIImageView(image: UIImage(named: "icon_france")) 
      imvFRFlag.frame = CGRectMake(switcher.frame.maxX + 6, 0, 19, 14) 
      imvFRFlag.transform = CGAffineTransformMakeTranslation(0, 20) 

      rightView.addSubview(imvFRFlag) 

      let btnMenu = UIButton() 
      btnMenu.setImage(UIImage(named : "icon_menu"), forState: .Normal) 
      btnMenu.frame = CGRectMake(imvFRFlag.frame.maxX + 30, 0, 23, 21) 
      btnMenu.addTarget(self, action: "tapToMenu:", forControlEvents: UIControlEvents.TouchUpInside) 
      btnMenu.transform = CGAffineTransformMakeTranslation(0, 18) 

      rightView.addSubview(btnMenu) 
      rightView.transform = CGAffineTransformMakeTranslation(0, 18) 

      let rightViewItem = UIBarButtonItem(customView: rightView) 

      navigationItem.rightBarButtonItem = rightViewItem 

      navigationController?.navigationBar.barStyle = .BlackTranslucent 
      navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) 
      navigationController?.navigationBar.shadowImage = UIImage() 
+0

我對這個錯誤道歉。我剛剛插入了代碼。 – Ashley

回答

2

爲什麼你不能輕按按鈕btnMenu的原因是你已經定位btnMenu它的父rightView的框架。超視圖之外的子視圖無法觸摸。

+0

謝謝。我改變了代碼,現在它正在工作。如果您可以查看我的代碼並改進它,那太棒了。 – Ashley

+0

哦。我很無禮。抱歉。 :) – Ashley

1

最後,我解決我的問題:

檢查我的新代碼:

let lblTitle = UILabel(frame: CGRectMake(7, 32, 100, 28)) 
      lblTitle.text = FMLStringLocale("APP_name") 
      lblTitle.textColor = UIColor.whiteColor() 
      lblTitle.font = ROBOTO_THIN_24 
      lblTitle.textAlignment = NSTextAlignment.Left 
      lblTitle.backgroundColor = UIColor.clearColor() 

      let lblTitleContainer = UIView(frame: CGRectMake(0, 0, 100, 64)) 
//   lblTitleContainer.bounds = CGRectOffset(lblTitleContainer.bounds, -6, -32) 
      lblTitleContainer.addSubview(lblTitle) 

      let leftTitle = UIBarButtonItem(customView: lblTitleContainer) 
      navigationItem.leftBarButtonItem = leftTitle 

      let rightView = UIView(frame: CGRectMake(0, 0, 134, 64)) 
//   rightView.backgroundColor = UIColor.grayColor() 
//   rightView.transform = CGAffineTransformMakeTranslation(0, 18) 

      let imvUSFlag = UIImageView(image: UIImage(named: "icon_us")) 
      imvUSFlag.frame = CGRectMake(0, 40, 18, 12) 

      rightView.addSubview(imvUSFlag) 

      let switcher = UISwitch(frame: CGRectMake(imvUSFlag.frame.maxX - 5, 32, 31, 16)) 
      switcher.setOn(false, animated: false) 
      switcher.addTarget(self, action: Selector("tapToChangeLanguage:"), forControlEvents: UIControlEvents.ValueChanged) 
      switcher.transform = CGAffineTransformMakeScale(0.5, 0.45) 


      let switchContainer = UIView(frame: switcher.frame) 
      switchContainer.addSubview(switcher) 

      rightView.addSubview(switcher) 

      let imvFRFlag = UIImageView(image: UIImage(named: "icon_france")) 
      imvFRFlag.frame = CGRectMake(switcher.frame.maxX + 6, 40, 18, 12) 

      rightView.addSubview(imvFRFlag) 

      let btnMenu = UIButton() 
      btnMenu.setImage(UIImage(named : "icon_menu"), forState: .Normal) 
      btnMenu.frame = CGRectMake(imvFRFlag.frame.maxX + 30, 35, 23, 21) 
      btnMenu.addTarget(self, action: "tapToMenu:", forControlEvents: UIControlEvents.TouchUpInside) 

      rightView.addSubview(btnMenu) 

      let rightViewItem = UIBarButtonItem(customView: rightView) 

      navigationItem.rightBarButtonItem = rightViewItem 

      navigationController?.navigationBar.barStyle = .BlackTranslucent 
      navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) 
      navigationController?.navigationBar.shadowImage = UIImage()