如何制作带圆角顶角和方角底角的UIView

joe*_*els 8 cocoa-touch uikit ios

我试图获得一个带圆角顶角和方形底角的视图,类似于分组UITableViewCell的顶行.

任何人都知道一种简单的方法来绘制它而不是使用背景图像?

Pen*_*One 11

我刚才读过这篇文章:

只有两个圆角?

还有这个后续帖子:

UIView的两个角落

我认为这些应该回答你的问题.

  • @Bavarious:在这种情况下,我不知道如何做到这一点,而不仅仅是复制答案(主要是代码).即使这样,对答案和第二篇文章的评论也包含很多相关细节.我将再看一遍,看看我是否可以添加更多上下文.我很欣赏建设性的批评. (4认同)

Nai*_*hta 6

Swift 4:从iOS 11开始

override func viewDidLoad() {
    super.viewDidLoad()

    if #available(iOS 11.0, *) {
        self.viewToRound.clipsToBounds = true
        viewToRound.layer.cornerRadius = 20
        viewToRound.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
    } else {
        // Fallback on earlier versions
    }
}
Run Code Online (Sandbox Code Playgroud)

早期的iOS版本

override func viewDidLayoutSubviews() {
    self.viewToRound.clipsToBounds = true
    let path = UIBezierPath(roundedRect: viewToRound.bounds,
                            byRoundingCorners: [.topRight, .topLeft],
                            cornerRadii: CGSize(width: 20, height: 20))

    let maskLayer = CAShapeLayer()

    maskLayer.path = path.cgPath
    viewToRound.layer.mask = maskLayer
}
Run Code Online (Sandbox Code Playgroud)


abd*_*lek 5

iOS 11中,引入了一个名为CACornerMask的新结构.

使用这种结构,您可以使用角落进行更改:topleft,topright,left left,right right.

Swift示例:

myView.clipsToBounds = true
myView.layer.cornerRadius = 10
myView.layer.maskedCorners = [.layerMinXMinYCorner,.layerMaxXMinYCorner]
Run Code Online (Sandbox Code Playgroud)

Objective-C样本

self.view.clipsToBounds = YES;
self.view.layer.cornerRadius = 10;
self.view.layer.maskedCorners = kCALayerMinXMinYCorner | kCALayerMaxXMinYCorner;
Run Code Online (Sandbox Code Playgroud)