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

时间:2014-06-10 22:19:29

标签: ios cocoa-touch animation swift uitoolbar

在我的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)
    }
}

1 个答案:

答案 0 :(得分:0)

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