在TraitCollectionDidChange之后重新组织工具栏和NavigationBar

时间:2016-06-03 09:29:56

标签: ios swift uinavigationbar uitoolbar uitraitcollection

我想支持类似于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]
    }
}

但是从常规水平尺寸类转换为紧凑尺寸类时似乎存在问题。导航栏中的项目始终正确,但工具栏项目被截断或为空。

当调出ViewController时,它总是被正确设置和显示,并且总是在水平常规尺寸类中 - 当尺寸类从常规变为紧凑时,只有一个问题。

这是一个示例,显示在更改尺寸类后,工具栏右下方的添加按钮消失。

enter image description here

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

1 个答案:

答案 0 :(得分:0)

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

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

我应该做的:

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