简体   繁体   English

view.Layer.CornerRadius 不适用于 UIView Swift 3 iOS 的 UIScrollView 子视图

[英]view.Layer.CornerRadius not working on UIScrollView subView of UIView Swift 3 iOS

I want the view to have rounded corners so I added我希望视图有圆角,所以我添加了

cardView.layer.cornerRadius = 5

But the subView of cardView, ie sViewListing which is a UIScrollView just doesn't seem to get effected by it.但是 cardView 的子视图,即UIScrollView的 sViewListing 似乎并没有受到它的影响。

I just want the topRight & topLeft cornerRadius of the UIScrollView to be set to 5 so I tried using UIBezierPath to mask it too but it still doesn't seem to work.我只想将UIScrollView的 topRight 和 topLeft cornerRadius设置为 5,所以我也尝试使用UIBezierPath来掩盖它,但它似乎仍然不起作用。

The following is what i tried:以下是我尝试过的:

import UIKit

class TableViewCell: UITableViewCell {

@IBOutlet var cardView: UIView!
@IBOutlet var sViewListing: UIScrollView!
@IBOutlet var bookTitleListing: UILabel!
@IBOutlet var ratingListing: UIImageView!
@IBOutlet var locationListing: UILabel!
@IBOutlet var priceListing: UILabel!

override func awakeFromNib() {
    super.awakeFromNib()

    let path = UIBezierPath(roundedRect:sViewListing.bounds,
                            byRoundingCorners:[.topRight, .topLeft],
                            cornerRadii: CGSize(width: 5, height:  5))

    let maskLayer = CAShapeLayer()

    maskLayer.path = path.cgPath
    sViewListing.layer.mask = maskLayer
    cardView.backgroundColor = UIColor.white
    cardView.layer.cornerRadius = 5
    cardView.clipsToBounds = true
    cardView.layer.masksToBounds = false
    cardView.layer.shadowColor = UIColor.black.withAlphaComponent(0.3).cgColor
    cardView.layer.shadowOffset = CGSize(width: 0, height: 0)
    cardView.layer.shadowOpacity = 0.8

    }

}

What can I do to fix it?我能做些什么来修复它?

Nested it further in another UIView Named it maskedCardView and just added the code将其进一步嵌套在另一个 UIView 中,将其命名为 maskedCardView 并添加代码

maskCardView.layer.cornerRadius = 5
maskCardView.layer.masksToBounds = true

after adding the outlet添加插座后

@IBOutlet var maskCardView: UIView!

This way it keeps the shadow while masking the topLeft & topRight corners of the UIScrollView.这样,它可以在遮盖 UIScrollView 的左上角和右上角的同时保留阴影。 Here's the complete code for reference.这是完整的代码供参考。

import UIKit

class TableViewCell: UITableViewCell {

    @IBOutlet var cardView: UIView!
    @IBOutlet var sViewListing: UIScrollView!
    @IBOutlet var bookTitleListing: UILabel!
    @IBOutlet var ratingListing: UIImageView!
    @IBOutlet var locationListing: UILabel!
    @IBOutlet var priceListing: UILabel!
    @IBOutlet var maskCardView: UIView!

    override func awakeFromNib() {
        super.awakeFromNib()

        maskCardView.layer.cornerRadius = 5
        maskCardView.layer.masksToBounds = true

        cardView.backgroundColor = UIColor.white
        cardView.layer.cornerRadius = 5
        cardView.clipsToBounds = true
        cardView.layer.masksToBounds = false
        cardView.layer.shadowColor = UIColor.black.withAlphaComponent(0.3).cgColor
        cardView.layer.shadowOffset = CGSize(width: 0, height: 0)
        cardView.layer.shadowOpacity = 0.8

    }

}

Thanks Anyway!不管怎么说,还是要谢谢你! :) :)

Make it:做了:

cardView.layer.masksToBounds = true
sViewListing.layer.masksToBounds = true

Here is my way to do it.这是我的方法。

@IBOutlet weak var roundConnerView: UIScrollView! {
    didSet {
        roundConnerView.layer.cornerRadius = 10
        roundConnerView.layer.masksToBounds = true
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM