iOS11
原因:Toolbar 在iOS11默认添加有_UIToolbarContentView, _UIButtonBarStackView覆盖在自定义的按钮上面,导致按钮无响应
解决方法
为了解决iOS11(与较低版本兼容)的问题,您只需要在UIToolBar被添加为UI层次结构的子视图之后,调用 layoutIfNeeded方法,UIToolbarContentView会降低到UIToolBar的第一个子视图,然后你就可以将所有的子视图添加到最顶层。
UIToolbar *toolbar = [UIToolbar new];
[self addSubview: toolbar];
[toolbar layoutIfNeeded];
<here one can add all subviews needed>
通过渲染可知,是因为上面有两层 view 挡住了,一个是_UIButtonBarStackView,另一个是_UIButtonBarStackView。这是 iOS11新增的特性,在UIToolbar初次布局完成后才会添加这两个视图。
在实例化UIToolbar后,立即调用
[toolbar layoutIfNeeded];
随后再添加toolbar的子视图,这样就不会有问题了。