簡體   English   中英

viewcontroller 的視圖的背景顏色決定了視圖的大小還是視圖的可點擊區域?

[英]Is viewcontroller's view's background color determine the size of the view or the tappable area of the view?

我下面有一個代碼,顯示紅色“Hello World!” 在青色視圖的中間。 單擊 .cyan 顏色和紅色“Hello World!”中的任意位置,將觸發警報。

但是,如果我刪除view.backgroundColor = .cyan代碼,現在背景是暗(黑色)。 點擊黑暗面不會觸發警報。 只需點擊紅色的“Hello World!” 將觸發警報。

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .cyan
        let textLabel = UILabel()
        textLabel.text = "Hello World!"
        textLabel.textAlignment = .center
        view.addSubview(textLabel)
        textLabel.backgroundColor = .red

        textLabel.snp.makeConstraints {
            $0.centerX.equalToSuperview()
            $0.centerY.equalToSuperview()
        }

        view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(showAlert)))
    }

在此處輸入圖片說明 為什么會出現這種行為? 如果我們沒有.backgroundColor設置,視圖會縮小嗎? 或者如果沒有設置 .backgroundColor 就無法.backgroundColor

更新

根據@hell0friend 評論,進一步嘗試使用以下內容。

  1. 使用view.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0) ,也將使其不可點擊。

  2. 使用view.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.001) ,將使其可點擊。

  3. 使用view.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0001) ,將使其不可點擊。

看起來當 alpha 值為 0.001 或以上時,它是可點擊的,但當它低於 0.001 時,它是不可點擊的。

p/s:所有這些只發生在 ViewController 的 rootView 上,而不發生在 childview 上(例如textLabel )。 對於textLabel ,如果我們在其上設置手勢,無論 alpha 級別如何,只要它具有textLabel.isUserInteractionEnabled = true ,它始終是可點擊的。

附加信息

我使用 Xcode 11.3.1。 我嘗試了 iOS 目標開發 13.2 和 11.0。 他們的行為相同。

嘗試使用

view.backgroundcolor = .clear 

可能對你有幫助,或者只是顯示整個代碼

最有可能的是,背景顏色不是黑色,而是清晰的。 透明顏色的 alpha 為零,這就是點擊不會觸發警報的原因。
https://developer.apple.com/documentation/uikit/uicolor/1621945-clearcolor

編輯:要在視覺上隱藏視圖,您可以將其隱藏屬性設置為 YES 或將其 alpha 屬性更改為 0.0。 隱藏視圖不會從系統接收觸摸事件。 請參閱view.alpha = 0 與 view.hidden = YES 的影響是什么?

暫無
暫無

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

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