为啥我的 UIBarButtonItem 在呈现视图控制器时会进行动画滑入?

Posted

技术标签:

【中文标题】为啥我的 UIBarButtonItem 在呈现视图控制器时会进行动画滑入?【英文标题】:Why do my UIBarButtonItem's do an animated slide-in when presenting a view controller?为什么我的 UIBarButtonItem 在呈现视图控制器时会进行动画滑入? 【发布时间】:2014-06-10 22:19:28 【问题描述】:

在我的 ios 应用程序中,我展示了一个视图控制器,其 modalTransitionStyle = UIModalTransitionStyleFlipHorizontal。当控制器出现时,其工具栏中的文本 UIBarButtonItem 会在控制器翻转到位时执行奇怪的幻灯片动画。

我不希望这个动画发生。如何预防?

编辑:感谢 Swift 的简洁性,这里有一个重现问题的完整示例:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate 
    var window: UIWindow?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool 
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        self.window!.backgroundColor = UIColor.whiteColor()
        self.window!.makeKeyAndVisible()

        let vc = TestVC()

        self.window!.rootViewController = UINavigationController(rootViewController: vc)

        return true
    


class PresentedVC: UIViewController 
    init() 
        super.init(nibName: nil, bundle: nil)
        toolbarItems = [UIBarButtonItem(title: "Foo", style: .Plain, target: nil, action: nil)]
        modalTransitionStyle = .FlipHorizontal
    

    override func viewWillAppear(animated: Bool) 
        super.viewWillAppear(animated)

        self.navigationController!.setToolbarHidden(false, animated: false)
    


class TestVC: UITableViewController 
    override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int 
        return 1
    

    override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! 
        let cell = UITableViewCell(style: .Default, reuseIdentifier: "noId")
        cell.textLabel.text = "Foo"
        return cell
    

    override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) 
        let vc = PresentedVC()
        let nvc = UINavigationController(rootViewController: vc)

        self.presentViewController(nvc, animated: true, completion: nil)
    

【问题讨论】:

为什么需要将navigationBar.hidden设置为FALSE?默认不是false吗? 不,默认是这样的。 是的,我在考虑导航栏,而您正在使用工具栏。我没有在 viewWillAppear 中将 setToolbarHidden 设置为 False,而是尝试在 TestVC 的 didSelectRowAtIndexPath 方法中将其设置为 false。它在这里工作,动画是正常的。这对你有用吗? 【参考方案1】:

我通过在viewDidLoad 中进行调用来解决此问题,以便在构造控制器时工具栏始终可见。然后我使用viewWillAppear:viewWillDisappear: 分别显示和隐藏控制器,这样导航控制器中的其他控制器就没有工具栏,如果他们不应该有的话。

【讨论】:

以上是关于为啥我的 UIBarButtonItem 在呈现视图控制器时会进行动画滑入?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 UIBarButtonItem 按钮在某些设备上获得背景颜色?

从 UIBarButtonItem 呈现方向更改后,如何防止 UIPopoverController passthroughViews 被重置?

在 UINavigationBar 中隐藏或禁用 UIBarButtonItem

为啥 UIBarButtonItem 默认是禁用的?

为啥我的 Django REST Framework 视图集 URL 没有解析?

为啥 UIBarButtonItem 图像总是模糊/模糊/像素化