簡體   English   中英

SWIFT - 將 layer.cornerRadius 設置為大於視圖高度會導致問題

[英]SWIFT - Setting layer.cornerRadius greater than the view height causes issues

我實際上只想在一側的視圖中添加角半徑。 半徑應該是全高。 這是我的實現。

someView.layer.cornerRadius = someView.frame.size.height
someView.layer.maskedCorners = [.layerMaxXMaxYCorner]

這會按要求完成工作,但它會在其他側面添加額外的形狀,如下所示。

可能是什么問題? 在此處輸入圖像描述

這看起來像一個 iOS 錯誤,我能夠重現它

但通常你不想設置cornerRadius大於半視圖最小邊,在你的情況下:

someView.layer.cornerRadius = someView.frame.size.height / 2

我假設它會產生您期望的結果:

在此處輸入圖像描述

角半徑是刻在矩形角上的圓的半徑,我認為這就是為什么半徑大於 side/2 可能會出現問題:圓不再適合矩形

我有同樣的問題。 我需要使視圖的高度為 16,底角半徑也為 16。

我的解決方案:

  1. 將要舍入的視圖添加到底部視圖
  2. 將 bottomView 剪輯到特定大小(在我的例子中寬度 = window 寬度和高度 = 16)
  3. 使圓形視圖的高度 = cornerRadius * 2(在我的例子中是 32)
  4. 將圓形視圖固定到 superView,不包括要四舍五入的相對邊緣(在我的例子中,我想將底部邊緣roundedView.autoPinEdgesToSuperviewEdges(with: .zero, excludingEdge: .top)

代碼

private let bottomView: UIView = {
    let view = UIView(forAutoLayout: ())
    view.clipsToBounds = true

    return view
}()
private let roundedView: UIView = {
    let view = UIView(forAutoLayout: ())
    view.clipsToBounds = true
    view.contentMode = .scaleAspectFill
    view.layer.maskedCorners = [.layerMinXMaxYCorner, .layerMaxXMaxYCorner]

    return view
}()

...
    contentView.addSubview(bottomView)
    bottomView.addSubview(roundedView)

...

func setupConstraints() {
        if roundedView.layer.cornerRadius >= roundedView.frame.height / 2 {
            roundedView.autoSetDimension(.height, toSize: roundedView.layer.cornerRadius * 2)
        } else {
            roundedView.autoPinEdge(toSuperviewEdge: .top)
        }

        roundedView.autoPinEdgesToSuperviewEdges(with: .zero, excludingEdge: .top)
        bottomView.autoPinEdgesToSuperviewEdges()
    }

結果:

在此處輸入圖像描述

暫無
暫無

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

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