【问题标题】:Add Shadow and Corners to UIView except the Bottom将阴影和角添加到 UIView 除了底部
【发布时间】:2019-01-17 21:24:28
【问题描述】:

我想在左上角和右上角添加圆角,并在其周围添加阴影,底部除外。底部不应有阴影。 我能够根据需要实现圆角。但不是影子。我需要一个同时实现两者的代码。在下图中,查看诊断视图。它的左上角和右上角是圆形的,周围有阴影。

【问题讨论】:

    标签: ios swift uiview shadow rounded-corners


    【解决方案1】:
      @IBOutlet var btnActive : UIButton!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
    
          //  btnActive.backgroundColor = UIColor(red: 171, green: 178, blue: 186, alpha: 1.0)
            // Shadow and Radius
            btnActive.layer.shadowColor = UIColor(red: 255, green: 255, blue: 255, alpha: 1).cgColor
            btnActive.layer.shadowOffset = CGSize(width: 0.0, height: 2.0)
            btnActive.layer.shadowOpacity = 2.0
            btnActive.layer.shadowRadius = 5.0
            btnActive.layer.masksToBounds = false
            btnActive.layer.cornerRadius = 4.0
        }
    

    【讨论】:

      【解决方案2】:

      试试这个代码。 自定义方法。 斯威夫特 4.0

      @IBOutlet weak var myView: UIView!
      override func viewDidLoad() {
          super.viewDidLoad()
          customCornerWithShadow(myView: myView, cornerRadius: 20)
      }
      
      func customCornerWithShadow(myView:UIView,cornerRadius:CGFloat) {
      
          myView.layer.cornerRadius = cornerRadius
          myView.clipsToBounds = false[enter image description here][1]
          myView.layer.maskedCorners = CACornerMask(rawValue: CACornerMask.RawValue(UInt8(CACornerMask.layerMinXMinYCorner.rawValue) | UInt8(CACornerMask.layerMaxXMinYCorner.rawValue)))
      
          myView.layer.shadowColor = #colorLiteral(red: 0.3098039329, green: 0.01568627544, blue: 0.1294117719, alpha: 1)
          myView.layer.shadowOffset = CGSize(width:0, height:-1)
      
          let shadowPath = UIBezierPath(roundedRect: myView.bounds, cornerRadius: cornerRadius)
          myView.layer.shadowPath = shadowPath.cgPath
          myView.layer.shadowOpacity = 1
      }
      

      【讨论】:

        【解决方案3】:

        找到解决办法:

        clipsToBounds = true,使角落变圆但阴影被隐藏。 所以我们可以使用 2 个视图一个作为容器,主视图作为它的子视图。容器的 clipstobound = false,主视图的 clipstobounds true。

        let containerV = UIView(frame: CGRect(x: 0, y: 0, width: self.frame.size.width , height: 50))
        containerV.clipsToBounds = false
        containerV.layer.shadowColor = UIColor.black.cgColor
        containerV.layer.shadowOpacity = 1 
        containerV.layer.shadowOffset = CGSize(width: -0.5, height: -3.0) 
        /* since we dont want shadow at bottom */
        containerV.layer.shadowRadius = 2
        containerV.layer.shadowPath = UIBezierPath(roundedRect: containerV.bounds, 
        cornerRadius: 10).cgPath
        
        let headerLabel  = UILabel()
        headerLabel.frame = containerV.bounds
        headerLabel.text = "Test Header"
        headerLabel.backgroundColor = UIColor.white
        
        headerLabel.clipsToBounds = true
        headerLabel.layer.cornerRadius = 10
        if #available(iOS 11.0, *) {
                headerLabel.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
            } else {
                // Fallback on earlier versions
            }
        containerV.addSubview(headerLabel)
        

        【讨论】:

          【解决方案4】:

          你可以使用扩展,

          在 Swift 4.1 和 Xcode 9.3.1 中

          extension UIView {
              @IBInspectable
              var cornerRadius: CGFloat {
                  get {
                      return layer.cornerRadius
                  }
                  set {
                      layer.cornerRadius = newValue
                  }
              }
              @IBInspectable
              var borderWidth: CGFloat {
                  get {
                      return layer.borderWidth
                  }
                  set {
                      layer.borderWidth = newValue
                  }
              }
              @IBInspectable
              var borderColor: UIColor? {
                  get {
                      if let color = layer.borderColor {
                          return UIColor(cgColor: color)
                      }
                      return nil
                  }
                  set {
                      if let color = newValue {
                          layer.borderColor = color.cgColor
                      } else {
                          layer.borderColor = nil
                      }
                  }
              }
              @IBInspectable
              var shadowRadius: CGFloat {
                  get {
                      return layer.shadowRadius
                  }
                  set {
                      layer.shadowRadius = newValue
                  }
              }
              @IBInspectable
              var shadowOpacity: Float {
                  get {
                      return layer.shadowOpacity
                  }
                  set {
                      layer.shadowOpacity = newValue
                  }
              }
              @IBInspectable
              var shadowOffset: CGSize {
                  get {
                      return layer.shadowOffset
                  }
                  set {
                      layer.shadowOffset = newValue
                  }
              }
              @IBInspectable
              var shadowColor: UIColor? {
                  get {
                      if let color = layer.shadowColor {
                          return UIColor(cgColor: color)
                      }
                      return nil
                  }
                  set {
                      if let color = newValue {
                          layer.shadowColor = color.cgColor
                      } else {
                          layer.shadowColor = nil
                      }
                  }
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-04-25
            • 2014-07-30
            • 1970-01-01
            • 2014-09-15
            • 2016-10-06
            • 1970-01-01
            • 2020-07-22
            相关资源
            最近更新 更多