菜鸟教程小白 发表于 2022-12-11 19:04:53

ios - 设置 UIBarButtonItem 动画在 iOS 11 上不起作用


                                            <p><p>从 iOS 11 开始,<code>animated</code> 参数似乎在 <code>setLeftBarButtonItems(_, animated: Bool)</code>, <code>setRightBarButtonItems(_, animated:)</code> 中被忽略了code>、<code>setLeftBarButton(_, animated:)</code>、<code>setRightBarButton(_, animated:)</code> 方法。</p>

<p>我为 <code>UIViewController</code> 子类编写了这个简单的代码:</p>

<pre><code>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: &#34;Cancel&#34;, style: .plain,
                                             target: self, action: #selector(changeRightBarButtonItem(_:)))
    navigationItem.setRightBarButtonItems(, animated: true)
}
</code></pre>

<p>这在 iOS 10 上按预期运行,但在 iOS 11 上,<code>animated</code> 是 <code>true</code> 还是 <code>false</code> 没有区别。</p >

<p>它似乎是 iOS 11,但也许我错过了一些东西。任何提示让它工作?即使是解决方法也会很有趣。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这似乎是 iOS 11 导航栏实现中的一个错误。</p>

<p>引用:</p>

<p>这些 <code>setLeftBarButtonItem:animated:</code>、<code>setRightBarButtonItem:animated:</code>、<code>setLeftBarButtonItems:animated:</code> 和 <code>setRightBarButtonItems:animated:</code> code> 根本不是真正的动画项目。</p>

<p>我认为这也是一个 iOS 11 实现的错误,因为在这些 mtehods 的调用链中,最终都会调用 <code>updateTopNavigationItemAnimated:</code>,但是,当前的实现是这样的。</p>

<pre><code>-:
0000000000be5708         push       rbp
; Objective C Implementation defined at 0x13ff050 (instance method), DATA XREF=0x13ff050
0000000000be5709         mov      rbp, rsp
0000000000be570c         mov      rsi, qword
; @selector(setupTopNavigationItem), argument &#34;selector&#34; for method _objc_msgSend
0000000000be5713         pop      rbp
0000000000be5714         jmp      qword
; _objc_msgSend
</code></pre>

<p>显然,此方法忽略给定的动画参数,并简单地调用不带任何参数的 <code>setupTopNavigationItem</code>。因此,此时动画标志被忽略。</p>

<p>由于这种实现,在某些情况下,UIBarButton 似乎有时会保持按下状态。</p>

<p>来源:<a href="https://gist.github.com/niw/569b49648fcab22124e1d12c195fe595" rel="noreferrer noopener nofollow">https://gist.github.com/niw/569b49648fcab22124e1d12c195fe595</a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 设置 UIBarButtonItem 动画在 iOS 11 上不起作用,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/46920720/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/46920720/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 设置 UIBarButtonItem 动画在 iOS 11 上不起作用