UIBarButtonItem在iOS 11 beta 7上无法点击?

时间:2017-08-24 06:13:45

标签: uibutton uibarbuttonitem ios11 xcode9beta6

还有另一个关于此的问题,但这与此无关,因为我认为这与iOS 11的测试版有关。

我将这两个UIButton分组在UIView内。这个UIView放在UIBarButtonItem里面,使用Interface Builder将整个内容设置为Left Bar Button Items

每个按钮在单击时会显示由故事板触发的弹出框。

我正在使用Xcode 8运行iOS 9的iPad 3上进行测试。这非常有效。

现在我决定在我的iPad Pro 9.7"这是运行iOS 11 beta 7.我正在使用Xcode 9 beta 6.当我在iPad Pro上运行时,导航栏上的所有按钮都已消失。他们不会对点击做出回应。现在我尝试使用相同的Xcode 9 beta 6并使用iOS 9在iPad 3上运行该应用程序,并且再次完美地工作。

我正在为iOS 9.1编译。

按钮甚至不突出显示以确认点击,就像在iOS 9上一样。

iOS 11 beta 7和条形按钮项是否存在问题?

有什么想法吗?

5 个答案:

答案 0 :(得分:15)

我发现使用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

在该自定义右键按钮成功获得点击后。

答案 1 :(得分:4)

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 class RouteList(ListView): model = DailyRoute template_name = 'route_list.html' def get_queryset(self): if DailyRoute.objects.filter( stage = '1').exists(): query_set = DailyRoute.objects.filter(owner=employer, stage = '1').order_by('route') else: query_set = [] return query_set 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 org.apache.commons.io.FileUtils.touch(yourFile) to the left navigation item.
  2. Drag another try { String filePath = "C:\sheet.xlsx"; FileWriter fw = new FileWriter(filePath ); } catch (IOException e) { System.out.println("File is open"); } 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.

答案 2 :(得分:3)

我通过将此方法添加到UIBarButtonItem来实现此功能:

[self.barBTNItem setWidth:44];

答案 3 :(得分:2)

让我们点击:

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

答案 4 :(得分:0)

升级到iOS 11时遇到了同样的问题。

包含按钮的UIView的大小为0x0。

我在Interface Builder上修复了UIView的高度x宽度,之后就可以了。