在iOS 11上,设置UIBarButtonItem的动画效果无法正常工作

3
自从iOS 11以来,在setLeftBarButtonItems(_,animated: Bool)setRightBarButtonItems(_,animated:)setLeftBarButton(_,animated:)setRightBarButton(_,animated:)方法中,animated参数似乎被忽略了。
我为UIViewController子类编写了这个简单的代码:
override func viewDidLoad() {
    super.viewDidLoad()

    let rightButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(changeRightBarButtonItem(_:)))
    navigationItem.rightBarButtonItem = rightButton
}

@objc
func changeRightBarButtonItem(_ sender: Any) {
    let newRightButton = UIBarButtonItem(title: "Cancel", style: .plain,
                                             target: self, action: #selector(changeRightBarButtonItem(_:)))
    navigationItem.setRightBarButtonItems([newRightButton], animated: true)
}

这在iOS 10上运行正常,但在iOS 11上,无论animatedtrue还是false都没有区别。

看起来这是iOS 11的问题,但也许我错过了什么。有什么提示可以让它工作吗?即使是解决方法也很有趣。


你是否添加了iOS 10中显示动画的GIF文件,以便我们可以更轻松地理解你的问题? - Himanshu Moradiya
你解决了吗? - Roi Mulia
不过在 iOS 11.2 beta 的模拟器上又可以工作了。我还没有在设备上测试过。 - Sparga
在11.2版本中对我仍然不起作用。 - nikans
1个回答

2

这似乎是iOS 11导航栏实现中的一个错误。

引用:

setLeftBarButtonItem:animated:setRightBarButtonItem:animated:setLeftBarButtonItems:animated:setRightBarButtonItems:animated:实际上并没有真正地对项目进行动画处理。

我认为这也是iOS 11实现中的一个错误,因为从这些方法的调用链最终会调用updateTopNavigationItemAnimated:,但是当前的实现就像这样。

-[_UINavigationBarVisualProviderModernIOS updateTopNavigationItemAnimated:]:
0000000000be5708         push       rbp
; Objective C Implementation defined at 0x13ff050 (instance method), DATA XREF=0x13ff050
0000000000be5709         mov        rbp, rsp
0000000000be570c         mov        rsi, qword [0x147f030]
; @selector(setupTopNavigationItem), argument "selector" for method _objc_msgSend
0000000000be5713         pop        rbp
0000000000be5714         jmp        qword [_objc_msgSend_11195c8]
; _objc_msgSend

显然,这种方法忽略了给定的动画参数,只是调用了setupTopNavigationItem,它不需要任何参数。因此,在这一点上忽略了动画标志。

由于这种实现方式,在某些情况下,UIBarButton有时会保持按下状态。

来源:https://gist.github.com/niw/569b49648fcab22124e1d12c195fe595


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接