簡體   English   中英

即使插入在 0,insertSubview() 也覆蓋了整個 Mainview

[英]insertSubview() covers the whole Mainview even though inserted at 0

我使用以下代碼將 UIView 插入到 UIButton 中:

        let backgroundView = UIView()
        backgroundView.backgroundColor = .red
        backgroundView.translatesAutoresizingMaskIntoConstraints = false
        
        blueButton.insertSubview(backgroundView, at: 0)
        NSLayoutConstraint.activate([
            backgroundView.leadingAnchor.constraint(equalTo: blueButton.leadingAnchor),
            backgroundView.trailingAnchor.constraint(equalTo: blueButton.trailingAnchor),
            backgroundView.topAnchor.constraint(equalTo: blueButton.topAnchor),
            backgroundView.bottomAnchor.constraint(equalTo: blueButton.bottomAnchor)
        ])

問題是 backgroundView 覆蓋了整個按鈕,我只看到紅色字段而不是帶有紅色背景(我的子視圖)的按鈕(它的圖像)。

這是我的圖像的故事板部分。 除了嘗試將子視圖放入:

在此處輸入圖片說明

我的目標是有一個如下圖所示的圓形背景。 例如,紅色圓圈按鈕有一個圓形的紅色(但比按鈕紅色更亮)backgroundView。按鈕的標准背景應該保持不變。

在此處輸入圖片說明

我也嘗試將 subView 發送到后台,但它對我不起作用:

blueButton.sendSubviewToBack(backgroundView)

我降低了子視圖的 alpha 值以查看按鈕圖像是否仍然存在。

for view in blueButton.subviews {
    view.alpha = 0.5
}

它是: 在此處輸入圖片說明

我怎么解決這個問題?

不要將額外的子視圖注入按鈕。 如果目標是使按鈕的背景顏色為紅色,請將其backgroundColor設置為.red 如果目標是在按鈕圖像后面放一些東西,這就是backgroundImage的用途。 或者只是讓按鈕圖像看起來像你真正想要的圖像。

我做了這個按鈕:

在此處輸入圖片說明

它看起來很像你的照片。 這是代碼:

let im = UIGraphicsImageRenderer(size: CGSize(width: 30, height: 30)).image {
    ctx in
    UIColor.red.withAlphaComponent(0.2).setFill()
    ctx.cgContext.fillEllipse(in: CGRect(x: 0, y: 0, width: 30, height: 30))
    UIColor.red.setFill()
    ctx.cgContext.fillEllipse(in: CGRect(x: 5, y: 5, width: 20, height: 20))
}
b.setImage(im.withRenderingMode(.alwaysOriginal), for: .normal)

我認為這比處理不需要的非法子視圖要好得多。

暫無
暫無

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

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