簡體   English   中英

呈現彈出框時,UIBarButtonItem不會變為灰色

[英]UIBarButtonItem doesn't turn gray when presenting popover

我的理解是,對於iOS 7,8和9,當您在應用程序中顯示一個彈出窗口時,UIToolbar中的所有UIBarButtonItem都應該自動顯示為灰色。

但是,大多數情況下,我得到的只是您點擊的按鈕變為灰色,其他按鈕保持原始顏色。

我用故事板構建了一個簡單的測試應用程序:

  • 嵌入在UINavigationController中的單個UIViewController
  • UIViewController上的UIToolbar
  • 工具欄中的五個UIBarButtonItems(使用圖像)
  • segues設置為從每個條形按鈕項目“呈現為彈出窗口”到另一個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

彈出窗口時,按鈕應全部為灰色(至少在白色/淺灰色工具欄上) - 據我所知,這是一個tintColor更改。

很難說它應該是什么。 看一下iPad上的Mail。 它具有與您的應用程序演示完全相同的行為:按下的圖標和所有其他條形變暗。 雖然我不同意這看起來不錯,但顯然這正是Apple想要的。

我也嘗試將工具欄的UIViewTintAdjustmentMode更改為.Dimmed時出現彈出窗口,但這也無濟於事。

我有同樣的想法。 我調高了-setTintAdjustmentMode:找出Apple在幕后做的事情,而且似乎是一些非常瘋狂的事。 它們通過將色調調整模式設置為正常而不是自動來強制將條中的其余按鈕着色。 因此,將條形本身設置為灰色不會顯示任何效果,因為按鈕不會繼承色調調整模式。

我會堅持它是怎么回事。 也許Apple將在未來版本中改變行為 - 而且您將始終保持最新狀態。 如果您確實希望所有按鈕都變暗,則應遍歷該欄的所有子視圖並將其tintAdjustmentMode設置為自動。 但是,我還沒弄清楚何時這樣做,因為Apple沒有提供合適的鈎子。 你需要在一些-performSelector:afterDelay:0.0上做一些-performSelector:afterDelay:0.0 (它只是強調它是多么的hacky)。 程序性解雇甚至根本不提供任何鈎子。 Apple也似乎在輪換時重新配置了tintAdjustmentMode ...在我看來,值得花時間考慮它太多了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM