2017-10-05 32 views
0

ナビゲーション項目がAutoLayoutのコンセプトで機能するはずの最近のアップデートまでうまくいきました。私はこのようにそれを使用している:ナビゲーションバーの戻るボタンが表示されない11

let button = UIButton(frame: CGRect(origin: CGPoint.zero, size: CGSize(width: 30, height: 30))) 
button.setImage(UIImage(named: "BackIcon"), for: UIControlState()) 
button.imageEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0) 
button.addTarget((target != nil ? target! : self), action: backAction, for: .touchUpInside) 
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: button) 

私はそれ、それはすべてのタップに呼び出されていない現時点では、滑らかな原因作るために何をすべきかの変更、通常にタップを取得するために2〜3回を取っています同じ地域。

+0

#backActionコードはどこですか? –

+1

私はメソッドが呼び出されないことを確認したので、コードを投稿する必要はありません。 – Fay007

+0

私はそれを得ることはありませんか?あなたに解答がある場合はそれを解答として投稿してください。 – Fay007

答えて

0

私のカスタムUIViewクラスに次のメソッドをオーバーライドためのトリックを行いました私:

override var intrinsicContentSize: CGSize { 
     return UILayoutFittingExpandedSize 
    } 
0

これはiOS 11で私にとって役立ちました。それがあなたに役立つかどうかを確認してください。

let btnLeftMenu = UIButton.init(type: .system) 
    let image = UIImage(named: "Back"); 
    btnLeftMenu.setImage(image, for: .normal) 
    btnLeftMenu.setTitle("BACK", for: .normal); 
    btnLeftMenu.imageEdgeInsets = UIEdgeInsetsMake(0, -30, 0, 0) 
    btnLeftMenu.titleEdgeInsets = UIEdgeInsetsMake(0, -30, 0, 0) 
    btnLeftMenu.sizeToFit() 
    btnLeftMenu.tintColor = UIColor.white 
    btnLeftMenu.titleLabel?.font = UIFont.init(name: "Avenir-Heavy", size: 16.0) 
    btnLeftMenu.addTarget(self, action: #selector (CustomMessageVC.backButtonAction(_:)), for: .touchUpInside) 
    let barButton = UIBarButtonItem(customView: btnLeftMenu) 
    self.navigationItem.leftBarButtonItem = barButton 

[EDIT]

おそらく幅、画像の高さが小さいです。リアルタイムのViewstack on Xcodeデバッグを使用して、バックボタンの幅と高さを確認できます。 ViewStackを見るには、画像の右から2番目のボタンをクリックしてください。幅と高さが問題の場合は、画像を中央に、ボタンの幅と高さを中央に、画像ビューのプロパティをアスペクトに合わせて大きくします。あなたの問題を解決するはずです。ハッピーコーディング。私にとって

Image

+0

はios 11で動作していますか?プラス私は多くの違いが表示されません! – Fay007

+0

これはiOS 11で動作しています。 –

+0

問題は@ Fay007で修正されましたか? –

0

作品:

let backButton = UIBarButtonItem(title: "Back", 
      style: .done, 
      target: self, 
      action: #selector(moveBack)) 
navigationItem.setLeftBarButton(backButton, animated: false) 

オープンビューデバッガとはleftBarButtonItemのためのフレームをご確認ください。 UIViewを継承せず、実行時にフレームを生成するため、leftBarButtonに注意する必要があります。

0

私のアプリでもこの問題が発生しています.iOS 11がリリースされたので、ここに私の解決策があります。あなたはボタンのフレームを設定する必要があるので、完璧ではありませんが、仕事を完了させ、iOS 9.3/10.3.1/11.1で動作します(間にあるかもしれません)。タップ領域は正常でUXは良好です。前

ios11 button bounds before adjusting frame

後: tap area expanded

私はviewDidLoadでこれを呼び出す:

func setNavbarButtons() { 
    // setup the left and right nav bar buttons 

    // manually define the frame for the buttons 
    let buttonWidth: CGFloat = 44 
    var buttonHeight: CGFloat = buttonWidth 

    // if possible, use the nav bar height as the button height, else fall back to the manual value above 
    if let frame = self.navigationController?.navigationBar.frame { 
     buttonHeight = frame.height 
    } 

    // apply this to the left inset for the left button, right inset for the right button, so the image is pushed to the left/right respectively 
    // (hence the negative value) 
    // setting this to 0 will center the image in the button and we don't want that 
    let edgeInset = -(buttonWidth/2) 

    // setup a button to hold the image (left) 
    let leftButton = UIButton(type: .custom) 
    let backIcon = UIImage(named: "Back with shadow") 
    backIcon!.isAccessibilityElement = true 
    backIcon!.accessibilityLabel = "Back" 

    // no title text 
    leftButton.setTitle("", for: .normal) 
    leftButton.setImage(backIcon, for: .normal) 
    leftButton.sizeToFit() 
    leftButton.addTarget(self, action: #selector(self.didTapLeftNavbarButton), for: .touchUpInside) 

    // define left button frame and inset 
    leftButton.frame.size.width = buttonWidth 
    leftButton.frame.size.height = buttonHeight 
    leftButton.contentEdgeInsets = UIEdgeInsetsMake(0, edgeInset, 0, 0) 

    // finally setup a UIBarButtonItem to hold the UIButton (arg) 
    let leftBarButtonItem = UIBarButtonItem(customView: leftButton) 
    leftBarButtonItem.title = "" 

    // set it 
    self.navigationItem.setLeftBarButton(leftBarButtonItem, animated: true) 

    // rinse/wash/repeat for right button 
    let rightButton = UIButton(type: .custom) 
    let shareIcon = UIImage(named: "Share") 
    shareIcon!.isAccessibilityElement = true 
    shareIcon!.accessibilityLabel = "Share" 

    // no title text 
    rightButton.setTitle("", for: .normal) 
    rightButton.setImage(shareIcon, for: .normal) 
    rightButton.sizeToFit() 
    rightButton.addTarget(self, action: #selector(self.didTapActionButton(_:)), for: .touchUpInside) 

    // define right button frame and inset 
    rightButton.frame.size.width = buttonWidth 
    rightButton.frame.size.height = buttonHeight 
    rightButton.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, edgeInset) 

    let rightBarButtonItem = UIBarButtonItem(customView: rightButton) 
    rightBarButtonItem.title = "" 

    self.navigationItem.setRightBarButton(rightBarButtonItem, animated: true) 
} 
関連する問題