UIBarButtonItem not clickable on iOS 11 beta 7?

后端 未结 5 889
南旧
南旧 2020-12-17 15:19

There is another question on SO about this but this has nothing to do with it because I think this has to do with a beta version of iOS 11.

I have these 2 UIBu

相关标签:
5条回答
  • 2020-12-17 15:20

    I have discovered the problem! Amazing bug!

    This is the drill. I was adding two buttons to the left navigation item by doing this:

    1. create a view
    2. add two UIButtons inside that view.
    3. add that view to the left navigation item.

    This was compiled for iOS 9 and works on a device with iOS 10 and below but not iOS 11.

    The "correct" way of doing this is this

    1. Drag an UIButton to the left navigation item.
    2. Drag another UIButton to the left navigation item.

    You will see that iOS allows that to happen and will manage both buttons under "navigation items".

    this will work on all iOS versions I have tested from 9 thru 11.

    0 讨论(0)
  • 2020-12-17 15:22

    I got this working by adding this method to the UIBarButtonItem:

    [self.barBTNItem setWidth:44];
    
    0 讨论(0)
  • 2020-12-17 15:27

    let tap:

    UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(manualAdd.dismissKeyboard))  
    tap.cancelsTouchesInView = false  // this line is required for xcode 9  
    view.addGestureRecognizer(tap)  
    
    0 讨论(0)
  • 2020-12-17 15:32

    I had the same issue when upgrading to iOS 11.

    The size of the UIView containing the buttons were 0x0.

    I fixed the height x width of the UIView on Interface Builder and it works after that.

    0 讨论(0)
  • 2020-12-17 15:35

    I found that the same code builded with XCode 8 works well on ios10-11, but when I build with XCode 9 UIBarButtonItem with a custom view don't respond to clicks.

    looks that the problem appears because from ios 11 navigation bar uses auto layout instead of dealing with frames. The buttons on screen look well but seem that technically they are offscreen.

    So my fix is to add auto layout constraint to my custom view.

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

    After that custom right bar button receives clicks successfully.

    0 讨论(0)
提交回复
热议问题