我的理解是,对于iOS 7,8和9,当您在应用程序中显示一个弹出窗口时,UIToolbar中的所有UIBarButtonItem都会自动显示为灰色。
然而,大多数情况下,我得到的只是您点按的按钮变为灰色,其他按钮保持原始颜色。
我用故事板构建了一个简单的测试应用程序:
在代码中,对于呈现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
答案 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
......在我看来,值得考虑的是值得花时间。