在 TraitCollectionDidChange 之后重组 Toolbar 和 NavigationBar

Reorganizing Toolbar and NavigationBar after TraitCollectionDidChange

我想支持类似Safari的布局,在水平规则的环境下,按钮显示在导航栏上,但在水平紧凑的环境下,有些按钮在导航栏上,有些按钮在工具栏上。

这是我的 traitCollectionDidChange

override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {

    let editingContextButton = editing ? resetButton : doneButton

    if traitCollection.horizontalSizeClass == .Regular {
        navigationController?.toolbarHidden = true

        navigationItem.leftBarButtonItems = [editButtonItem(), helpButton]
        navigationItem.rightBarButtonItems = [editingContextButton, addButton]

    } else if traitCollection.horizontalSizeClass == .Compact{
        navigationController?. toolbarHidden = false

        navigationItem.leftBarButtonItems = [editButtonItem()]
        navigationItem.rightBarButtonItems = [editingContextButton]
        navigationController?.toolbarItems = [helpButton, UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil), addButton]
    }
}

但是从常规水平尺寸 class 过渡到紧凑尺寸时似乎出现了问题。导航栏中的项目始终正确,但工具栏项目被截断或为空。

当调出ViewController时,它总是设置和显示正确,并且在水平方向的常规尺寸class中总是正确的——只有尺寸[=28=时才有问题] 从常规变为紧凑。

这是一个示例,显示右下角的添加按钮在大小更改后从工具栏中消失 class。

在 5.5" iPhone 上旋转设备时会发生同样的事情,在 iPad 上纵向旋转设备时会发生同样的事情,激活多任务处理后工具栏只是空的。这里有什么问题?谢谢!

我意识到我没有正确设置工具栏项目。而不是

navigationController?.toolbarItems = [helpButton, UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil), addButton]

我应该做的:

setToolbarItems([helpButton, UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil), addButton], animated: false)