これについてSOについて別の質問がありますが、これはiOS 11のベータ版と関係があると思うので、これは何の関係もありません。
これらの2つのUIButton
がUIView
内にグループ化されています。このUIViewはUIBarButtonItem
内に配置され、Interface Builderを使用して全体がLeft Bar Button Items
として設定されます。
各ボタンをクリックすると、ストーリーボードによってトリガーされるポップオーバーが表示されます。
Xcode 8を使用して、iOS 9を実行するiPad 3でこれをテストしています。これは非常にうまく機能します。
IOS 11ベータ7を実行しているiPad Pro 9.7 "でこれをテストすることにしました。Xcode9ベータ6を使用しています。iPadProでこれを実行すると、ナビゲーションバーのすべてのボタンが無効になります。クリックへの応答:同じXcode 9ベータ6を試して、iOS 9を搭載したiPad 3でアプリを実行すると、すべてがうまく動作します。
IOS 9.1用にコンパイルしています。
IOS 9の場合のように、タップを確認するために強調表示されていないボタンもあります。
IOS 11ベータ7およびバーボタンアイテムに問題はありますか?
何か案は?
問題を発見しました!驚くべきバグ!
これはドリルです。これを行うことで、左側のナビゲーション項目に2つのボタンを追加していました。
UIButtons
を追加します。これはiOS 9用にコンパイルされたもので、iOS 11ではなくiOS 10以下のデバイスで動作します。
これを行う「正しい」方法はこれです
UIButton
を左側のナビゲーションアイテムにドラッグします。UIButton
を左側のナビゲーションアイテムにドラッグします。IOSはそれを可能にし、「ナビゲーションアイテム」の下の両方のボタンを管理します。
これは、9〜11でテストしたすべてのiOSバージョンで動作します。
XCode 8でビルドされた同じコードがios10-11で正常に動作することがわかりましたが、XCode 9でビルドすると、カスタムビューでUIBarButtonItemがクリックに応答しません。
ios 11からナビゲーションバーがフレームを処理する代わりに自動レイアウトを使用するため、問題が発生するようです。画面上のボタンはよく見えますが、技術的にはオフスクリーンのようです。
したがって、私の修正は、カスタムビューに自動レイアウト制約を追加することです。
//my custom view init
let view = MyCustomView()
view.frame = CGRect(x: 0, y: 0, width: 44, height: 44)
let rightButtonItem = UIBarButtonItem(customView: view)
//constraints
let widthConstraint = view.widthAnchor.constraint(equalToConstant: 44)
let heightConstraint = view.heightAnchor.constraint(equalToConstant: 44)
heightConstraint.isActive = true
widthConstraint.isActive = true
//add my view to nav bar
self.rightBarButtonItem = rightButtonItem
カスタムの右バーボタンがクリックを正常に受信した後。
このメソッドをUIBarButtonItemに追加することで、これが機能するようになりました。
[self.barBTNItem setWidth:44];
タップしましょう:
UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(manualAdd.dismissKeyboard))
tap.cancelsTouchesInView = false // this line is required for xcode 9
view.addGestureRecognizer(tap)
IOS 11にアップグレードするときに同じ問題が発生しました。
ボタンを含むUIViewのサイズは0x0でした。
Interface BuilderでUIViewの高さx幅を修正しましたが、その後動作します。