web-dev-qa-db-de.com

UIBarButtonItem unter iOS 11 Beta 7 nicht anklickbar?

Es gibt noch eine weitere Frage zu SO, aber das hat nichts damit zu tun, weil ich denke, dass dies mit einer Betaversion von iOS 11 zu tun hat.

Ich habe diese 2 UIButtons, die in einer UIView gruppiert sind. Diese UIView wird in eine UIBarButtonItem eingefügt und das Ganze wird mit dem Interface Builder als Left Bar Button Items festgelegt.

Wenn Sie auf eine Schaltfläche klicken, wird ein Popover angezeigt, der vom Storyboard ausgelöst wird.

Ich teste dies auf einem iPad 3 mit iOS 9 und Xcode 8. Das funktioniert wunderbar.

Jetzt habe ich mich entschlossen, dies auf meinem iPad Pro 9.7 "zu testen, auf dem iOS 11 Beta 7 ausgeführt wird. Ich verwende Xcode 9 Beta 6. Wenn ich das auf dem iPad Pro starte, sind alle Schaltflächen in der Navigationsleiste leer. Ich reagiere auf Klicks und jetzt probiere ich Xcode 9 Beta 6 aus und starte die App auf dem iPad 3 mit iOS 9 und alles funktioniert wunderbar.

Ich kompiliere für iOS 9.1.

Schaltflächen werden nicht hervorgehoben, um das Tippen zu bestätigen, wie dies bei iOS 9 der Fall ist.

Gibt es ein Problem mit iOS 11 Beta 7 und Elementen der Bar-Schaltfläche?

Irgendwelche Ideen?

14
SpaceDog

Ich habe das Problem entdeckt! Erstaunlicher Fehler!

Das ist die Übung. Ich habe dem linken Navigationselement dabei zwei Schaltflächen hinzugefügt:

  1. eine Ansicht erstellen
  2. fügen Sie zwei UIButtons in dieser Ansicht hinzu.
  3. fügen Sie diese Ansicht dem linken Navigationselement hinzu.

Dies wurde für iOS 9 kompiliert und funktioniert auf einem Gerät mit iOS 10 und darunter, jedoch nicht mit iOS 11.

Der "richtige" Weg ist, dies zu tun

  1. Ziehen Sie eine UIButton zum linken Navigationselement.
  2. Ziehen Sie ein weiteres UIButton zum linken Navigationselement.

Sie werden feststellen, dass iOS dies zulässt und beide Schaltflächen unter "Navigationselemente" verwalten.

dies funktioniert auf allen iOS-Versionen, die ich von 9 bis 11 getestet habe.

3
SpaceDog

Ich habe festgestellt, dass derselbe Code, der mit XCode 8 erstellt wurde, auf ios10-11 gut funktioniert, aber wenn ich mit XCode 9 UIBarButtonItem mit einer benutzerdefinierten Ansicht baue, reagiert es nicht auf Klicks. 

sieht aus, dass das Problem auftritt, da die Navigationsleiste von iOS 11 das automatische Layout verwendet, anstatt mit Frames zu arbeiten. Die Tasten auf dem Bildschirm sehen gut aus, scheinen jedoch technisch gesehen außerhalb des Bildschirms zu sein.

Mein Fix ist also, meiner benutzerdefinierten Ansicht eine automatische Layouteinschränkung hinzuzufügen. 

//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

Nach dieser benutzerdefinierten Schaltfläche der rechten Leiste werden Klicks erfolgreich empfangen.

15

Ich habe das funktioniert, indem ich diese Methode zu UIBarButtonItem hinzugefügt habe: 

[self.barBTNItem setWidth:44];
3
Josher

tippen Sie auf: 

UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(manualAdd.dismissKeyboard))  
tap.cancelsTouchesInView = false  // this line is required for xcode 9  
view.addGestureRecognizer(tap)  
2
Ahmad

Beim Upgrade auf iOS 11 hatte ich dasselbe Problem.

Die Größe der UIView, die die Schaltflächen enthielt, war 0x0.

Ich habe die Höhe x Breite von UIView im Interface Builder festgelegt und funktioniert danach.

0
Quan Vu