【问题标题】:Corner radius only for top and bottom left corner of a view角半径仅适用于视图的左上角和左下角
【发布时间】:2017-01-18 11:12:42
【问题描述】:

我只需要对视图的左上角和左下角进行圆角,所以我尝试了这个:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCell(withIdentifier: "teamCell", for: indexPath) as! TeamCell

    let view = cell.backgroundCellView
    let rectShape = CAShapeLayer()
    rectShape.bounds = (view?.frame)!
    rectShape.position = (view?.center)!
    rectShape.path = UIBezierPath(roundedRect: (view?.bounds)!, byRoundingCorners: [.topRight, .topLeft], cornerRadii: CGSize(width: 20, height: 20)).cgPath
    view?.layer.mask = rectShape
    view?.layer.masksToBounds = true

    return cell
}

它工作得很好,但是在我设置了约束(尾随、前导、顶部和底部 - 我需要一个响应式视图)之后,只有左上角是圆角的,而不是另一个。我该如何解决?

【问题讨论】:

  • 以上代码在哪里?
  • 在 cellForRow 中,调用 dequeueReusableCell 方法后(我要编辑我的问题)
  • 在调用super.layoutSubviews() 之后,您应该尝试将其移动到您的UITableViewCell 子类的layoutSubviews 方法中
  • 将构建掩码的代码放入单元格的 laoutSubviews 是正确答案。 @beyowulf,您应该将其发布为答案,以便 OP 可以接受。

标签: ios swift uiview constraints cornerradius


【解决方案1】:

尝试使用

view?.layer.cornerRadius = 15 

插入

rectShape.path = UIBezierPath(roundedRect: (view?.bounds)!, byRoundingCorners: [.topRight, .topLeft], cornerRadii: CGSize(width: 20, height: 20)).cgPath

【讨论】:

  • 这将环绕所有 4 个角
【解决方案2】:

试试这个

 let path = UIBezierPath(roundedRect:viewToRound.bounds, byRoundingCorners:[.TopLeftt, .BottomLeft], cornerRadii: CGSizeMake(20, 20))
    let maskLayer = CAShapeLayer()
    maskLayer.path = path.CGPath
    view.layer.mask = maskLayer

【讨论】:

    【解决方案3】:

    一个简单的方法是设置单元格内容视图的圆角半径,然后为了防止内容的右侧角被舍入,您可以将它们限制为内容视图有 x 尾随空间(其中x 是你的圆角半径)。不过,这确实需要您调整布局以考虑单元格右侧的额外填充。

    【讨论】:

      【解决方案4】:

      从 iOS 11 和 Swift 4 开始,您可以使用 maskedCorners:

      let myView = UIView()
      
      myView.layer.cornerRadius = 15
      myView.clipsToBounds = true
      
      // Top Left Corner: .layerMinXMinYCorner
      // Top Right Corner: .layerMaxXMinYCorner
      // Bottom Left Corner: .layerMinXMaxYCorner
      // Bottom Right Corner: .layerMaxXMaxYCorner
      myView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMinXMaxYCorner]
      

      【讨论】:

        猜你喜欢
        • 2016-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-31
        • 1970-01-01
        • 2015-09-22
        • 2020-10-27
        相关资源
        最近更新 更多