1

我想支持类似于 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 时,它总是被正确设置和显示,并且在水平规则尺寸类中总是正确的——只有当尺寸类从常规变为紧凑时才会出现问题。

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

在此处输入图像描述

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

4

1 回答 1

0

我意识到我没有正确设置工具栏项目。代替

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

我应该这样做:

setToolbarItems([helpButton, UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil), addButton], animated: false)
于 2016-06-03T19:39:31.820 回答