当呈现弹出窗口时,UIBarButtonItem不会变灰

时间:2015-06-30 21:29:14

标签: ios uibarbuttonitem uipopovercontroller

我的理解是,对于iOS 7,8和9,当您在应用程序中显示一个弹出窗口时,UIToolbar中的所有UIBarButtonItem都会自动显示为灰色。

然而,大多数情况下,我得到的只是您点按的按钮变为灰色,其他按钮保持原始颜色。

我用故事板构建了一个简单的测试应用程序:

  • 嵌入在UINavigationController中的单个UIViewController
  • UIViewController上的UIToolbar
  • 工具栏中的五个UIBarButtonItems(使用图像)
  • segues设置为"呈现为Popover"从每个条形按钮项到另一个UIViewController

在代码中,对于呈现popover的UIViewController我只有这个:

class ViewController: UIViewController, UIPopoverPresentationControllerDelegate {

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        if segue.identifier == "ShowPopover" {
            let popoverViewController = segue.destinationViewController
            popoverViewController.preferredContentSize = CGSizeMake(320.0, 224.0)

            if let popoverController = popoverViewController.popoverPresentationController {

                // set the delegate, so adaptivePresentationStyleForPresentationController is called
                popoverController.delegate = self
            }
        }
    }


    // MARK: - UIAdaptivePresentationControllerDelegate

    // return .None to show as a popover on iPhone too
    func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
        return .None
    }
}

即使使用这个简单的例子,当我点击其中一个按钮来显示弹出窗口时,只有点击的按钮变为灰色。

我是否误解了当呈现弹出窗口时UIBarButtonItems的行为方式?或者这是一个已知的iOS SDK错误?有没有解决方法?

更新我在此发布了一个示例应用程序,演示了使用iOS 8.4 SDK的问题: https://dl.dropboxusercontent.com/u/2349787/BarButtonPopover.zip

1 个答案:

答案 0 :(得分:2)

  

当弹出窗口时(至少在白色/浅灰色工具栏上),按钮都应该是灰色的 - 据我所知,它是一个tintColor变化。

很难说应该是什么。看一下iPad上的Mail。它与您的应用程序演示的行为完全相同:按下的图标和所有其他变暗。虽然我不同意这看起来很好,但显然这正是苹果想要的。

  

我还尝试将工具栏的UIViewTintAdjustmentMode更改为.Dimmed,当弹出窗口显示时,但这也没有帮助。

我有同样的想法。我调高了@Override public void onCreate(Bundle savedInstanceState) { // inflate the layout setContentView(R.layout.your_layout); // get references ImageView imageView = (ImageView) findViewById(R.id.image); TextView textView = (TextView) findViewById(R.id.placeholder_error_info); // set properties imageView.setImageResource(R.drawable.some_drawable); textView.setText("something"); } 以了解苹果公司在幕后做了什么,而且这似乎是一些非常疯狂的事。通过将色调调整模式设置为正常而非自动,他们强制要调整条形中的其余按钮。因此,将条形本身设置为暗淡不会显示任何效果,因为按钮不会继承色调调整模式。

我会坚持它是怎样的。也许Apple将在未来版本中改变行为 - 而且您将始终保持最新状态。如果您确实希望所有按钮都变暗,则应遍历该栏的所有子视图并将其-setTintAdjustmentMode:设置为自动。但是,我还没弄清楚何时这样做,因为Apple没有提供合适的钩子。你需要在一些钩子上做一些tintAdjustmentMode(这只是突出它是多么的hacky)。程序性解雇甚至根本不提供任何钩子。 Apple也似乎在轮换时重新配置了-performSelector:afterDelay:0.0 ......在我看来,值得考虑的是值得花时间。